UE5学习日记——Rope Swing 人物与绳索摆动知识准备

rope swing荡绳
比我想的要复杂,目前还没查到简单的做法。本文为查资料的记录,积累后再做一个自己满意的荡绳蓝图。

在这里插入图片描述

一、某国外网友的解释

原文

https://forums.unrealengine.com/t/implementing-rope-swing/83098/15
Project Flake - Physics Rope Demo(视频地址油管)

Very late to the party, but I’ve been banging my head to create a rope behavior similar to what OP described for months, and I finally got it to where I’m quite pleased with the result. It’s for a 2D game, but the concept should work just fine for 3D as well.

You can see the prototype in action HERE 49

I made several prototypes with cables, physics constraints, spline mesh that all fell apart at one point or another before arriving at my current solution.

I’d be happy to break it down in detail if anyone is still looking for a way to create this kind of rope, but here’s my high-level approach:

  • The rope actor uses a skeletal mesh with a physics Asset as a base.
    Compared to manually creating a rope with constraints and capsules, I found a bone-chain much more stable and easier to set up.

    • Skeletal mesh can be swapped out per instance

    • Skeletal mesh set to invisible and hidden in game

  • Construction script adds a spline with points at each bone socket
    Since the skeletal mesh still moved in Y even after all the axis were locked, I matched the spline to only X and Z to keep it on my 2D plane

    • Spline used to add spline mesh

    • Spline mesh deforms much nicer than a skinned mesh and keeps its “thickness” well, especially when the rope coils in on itself

  • On Tick: Update spline points to match bone sockets, and update spline mesh to match spline points.

  • Skeletal mesh capsules use custom object channel “Rope Actor” with NO overlap events

    • Overlap events trigger the character movement impulse sent to physics bodies which I can’t control.
      Since I’m doing 2D, I don’t want the rope to block my character, but still react a little bit when the character walks past.

    • On Tick: trace for object type “Rope Actor”

      • Walking: Apply impulse to closest bone on rope based on values set per rope instance

      • Falling: Grab Rope (unless already on another rope)

  • Grabbing:

    • Get closest point on rope spline based on character trajectory, get distance along spline as target

    • Set movement mode flying and ignore rope collision

    • Timer Function: match character location to location of “Location at distance alone Spline” determined earlier

      • Rotation of character is determined by a custom vector between current character location and a point “hand-distance”-away further up the spline
  • Climbing up/down:

    • On Up-Input, I run a timeline that outputs a distance float value and on update, add/subtract that value from my distance along spline variable

    • Location-match timer function keeps matching character location/rotation to the spline at that updated distance

  • Swinging:

    • Get a custom forward vector based on closest bone to character and root bone pivot for a nice arc, regardless of actual bone/character rotation

    • Calculate swing force

      • There’s a lot going on here, but basically I wanted a short ease-in to full force and decrease the force as the character swings upward so I can’t just infinitely hover at an angle if I keep pressing in that direction
    • Rope applies force to bone closest to character AND fractional force to each bone above the target point, decreasing in strength the further away from the character the bone is. This is what really made the swing work for me - before that, the rope would always start to curve as I swung higher, and eventually become quite jerky and unstable

Obviously, lots of smaller things going on here and there, but that’s beyond the scope of a simple reply.

中文

主要部分中文翻译:

  • 绳索演员使用以物理资源为基础的骨架网格。
    *与手动创建带有约束和胶囊的绳索相比,我发现骨链更稳定,更容易设置。

    • 骨架网格可以按实例换出

    • 骨架网格设置为不可见并在游戏中隐藏

  • 构造脚本在每个骨窝处添加一个带有点的样条曲线
    由于即使所有轴都被锁定,骨架网格仍然在 Y 中移动,因此我将样条曲线仅匹配到 X 和 Z,以使其保持在我的 2D 平面上

  • 用于添加样条网格的样条

    • 花键网比蒙皮网格变形得更好,并且可以很好地保持其“厚度”,尤其是当绳索自行缠绕时
  • 在滴答时:更新样条点以匹配骨窝,并更新样条网格以匹配样条点。

  • 骨架网格胶囊使用自定义对象通道“Rope Actor”,没有重叠事件

    • 重叠事件会触发发送到物理物体的角色移动冲动,这是我无法控制的。
      *因为我在做2D,我不想让绳子挡住我的角色,但当角色走过时,我仍然会做出一点反应。

    • 在滴答声中:对象类型“Rope Actor”的跟踪

      • 行走:根据每个绳索实例设置的值,对绳索上最近的骨头施加冲动

      • 坠落:抓住绳索(除非已经在另一根绳索上)

  • 抓住:

    • 根据角色轨迹获取绳索样条上的最近点,获取沿样条线的距离作为目标

    • 设置飞行运动模式,忽略绳索碰撞

    • 定时器功能:将字符位置与之前确定的“仅远距离样条位置”的位置相匹配

      • 字符的旋转由当前字符位置和样条曲线上更远的“手距离”点之间的自定义向量决定
  • 向上/向下攀爬:

    • 在 Up-Input 上,我运行一个输出距离浮点值的时间线,并在更新时,从我的距离中沿样条变量添加/减去该值

    • 位置匹配计时器功能使字符位置/旋转与更新距离处的样条曲线保持匹配

  • 摆动:

    • 根据最接近角色的骨骼和根骨枢轴获得自定义的前向向量,以获得漂亮的弧线,而不管实际的骨骼/角色旋转如何

    • 计算摆动力

      • 这里发生了很多事情,但基本上我想要一个短暂的放松到全力以赴,并在角色向上摆动时减少力量,这样如果我继续朝那个方向按,我就不能以一个角度无限悬停
    • 绳索对最接近角色的骨骼施加力,对目标点上方的每个骨头施加分数力,离骨骼越远,强度越小。这才是真正让秋千对我起作用的原因——在那之前,绳子总是会随着我挥得更高而开始弯曲,最终变得非常生涩和不稳定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493067.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript Uncaught ReferenceError: WScript is not defined

项目场景: 最近在Visual Studio 2019上编译libmodbus库,出现了很多问题,一一解决特此记录下来。 问题描述 首先就是configure.js文件的问题,它会生成两个很重要的头文件modbus_version.h和config.h,这两个头文件其中…

软件测试过程中如何有效的开展接口自动化测试

一.简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测试效率和测试质量,减少人工测试的工作量和测试成本,并且能够快速发现和修复接口错误&…

使用Qt生成图片

Qt之生成png/jpg/bmp格式图片_qt生成图片-CSDN博客 (1)使用QPainter 示例关键代码: QImage image(QSize(this->width(),this->height()),QImage::Format_ARGB32);image.fill("white");QPainter *painter new QPainter(&image);painter->…

关于振弦式渗压计的基本知识详解

振弦式渗透压力计的组成主要包括振弦、高灵敏度金属薄膜、渗透石以及激励和接收线圈等。其运作机制是:水压力施加在金属薄膜上导致其形变,进而影响连接的钢弦的拉力。由于钢弦振动频率与其拉力密切相关,通过测量钢弦的频率变化即可计算出渗透…

Python更改Word文档的页面大小

页面大小确定文档中每个页面的尺寸和布局。在某些情况下,您可能需要自定义页面大小以满足特定要求。在这种情况下,Python可以帮助您。通过利用Python,您可以自动化更改Word文档中页面大小的过程,节省时间和精力。本文将介绍如何使…

【React】react 使用 lazy 懒加载模式的组件写法,外面需要套一层 Loading 的提示加载组件

react 组件按需加载问题解决 1 错误信息2 解决方案 1 错误信息 react 项目在创建 router 路由时&#xff0c;使用 lazy 懒加载时&#xff0c;导致以下报错&#xff1a; The above error occurred in the <Route.Provider> component:Uncaught Error: A component suspe…

秒杀VLOOKUP函数,查找数字我只服SUMIF函数

一提到数据查询&#xff0c;相信很多人的第一反应就是使用Vlookup函数。但是今天我想跟大家分享另一种比较另类的数据查询方式&#xff0c;就是利用SUMIF函数&#xff0c;相较于Vlookup函数它更加的简单灵活、且不容易出错&#xff0c;下面我们就来学习下它的使用方法。 1、常…

【基础知识】HTTP协议中“POST“和“GET”两种请求方式区别

0x01:两种方法对比 在我们客户端与服务器之间进行请求和响应的时候&#xff0c;最常用的两种方法是&#xff1a;GET和POST POST —— 向指定的资源提交要被处理的数据。 GET —— 向指定的资源请求数据 GET请求参数呢一般显示在URL上面 POST请求参数是在请求体里面&#xff…

电阻的妙用:限流、分压、滤波,助力电路设计!

电阻可以降低电压&#xff0c;这是通过电阻的分压来实现的。事实上&#xff0c;利用电阻来降低电压只是电阻的多种功能之一。电路中的电阻与其他元件&#xff08;电容、电感&#xff09;结合用于限流、滤波等。&#xff08;本文素材来源&#xff1a;https://www.icdhs.com/news…

七段码(蓝桥杯)

文章目录 七段码题目描述答案&#xff1a;80分析编程求解&#xff1a;有多种方法方法一&#xff1a;状态压缩枚举构图&#xff08;以二极管为顶点&#xff09;DFS判断连通代码方法二&#xff1a;bfs 七段码 题目描述 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了…

win11 环境配置 之 Jmeter

一、安装 JDK 1. 安装 jdk 截至当前最新时间&#xff1a; 2024.3.27 jdk最新的版本 是 官网下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/ 建议下载 jdk17 另存为到该电脑的 D 盘下&#xff0c;新建jdk文件夹 开始安装到 jdk 文件夹下 2. 配…

自动化测试框架Taffy

Taffy Taffy是基于nosetests的自动化测试框架。 Taffy主要用来测试后台服务(包括且不限于Http, Dubbo/hessian, Webservice, Socket等类型接口)&#xff0c;也可集成Selenium, Appium进行WEB或APP的自动化测试&#xff0c;或集成locust进行性能测试。 Taffy封装实现了结果对…

Typora 主题配置

title: Typora主题配置 search: 2024-03-19 tags: “#Typora主题” Typora 主题配置 文章目录 Typora 主题配置Step-1 进入官方主题网站Step-2 选中主题&#xff0c;并点击DownloadStep-3 跳转到 github 网站Step-4 直接下载源码Step-5 解压下载的源码Step-6 找到下载源码中的…

搜索树概念及操作

目录 一. .搜索树 1.1 概念 1.2 操作1 查找 1.3 操作2 插入 1.4 操作3 删除 1.5 性能分析 1.6 和 java 类集的关系 一. .搜索树 1.1 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空&#x…

Automatic Prompt Engineering

让大模型自己生成prompt&#xff0c;生成提示&#xff08;prompt&#xff09;存在两种不同的操作方式。第一种方式是在文本空间中进行&#xff0c;这种提示以离散的文本形式存在。第二种方式是将提示抽象成一个向量&#xff0c;在特征空间中进行操作&#xff0c;这种提示是抽象…

二进制日志备份与恢复

二进制备份是 MySQL 数据库备份的一种方式&#xff0c;它通过记录数据库的所有更改操作&#xff0c;以二进制格式保存&#xff0c;实现对数据库的增量备份和恢复。binlog_format 是 MySQL 中用来指定二进制日志格式的参数&#xff0c;有三种常见的选项&#xff1a;STATEMENT、R…

【PLC】PROFIBUS(二):总线协议DP、PA、FMS

1、总线访问协议 (FDL) 1.1、多主通信 多个主设备间&#xff0c;使用逻辑令牌环依次向从设备发送命令。 特征&#xff1a; 主站间使用逻辑令牌环、主从站间使用主从协议主站在一个限定时间内 (Token Hold Time) 对总线有控制权从站只是响应一个主站的请求它们对总线没有控制…

spring-boot-devtools配置和原理

一、前言 昨天&#xff0c;一个同事Eclipse在启动SpringBoot项目时一直不停地加载&#xff0c;后来发现是因为spring-boot-devtools造成的问题&#xff0c;因为我们把日志输出的目录设置在当前项目里&#xff08;~/mnt/logs/&#xff0c;这样设置是因为mac电脑没有根目录权限&…

Django之Web应用架构模式

一、Web应用架构模式 在开发Web应用中,有两种模式 1.1、前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示。前端与后端的耦合度很高 1.2、前后端分离 在前后端分离的应用模式中,后端仅返…

树状数组的三种代码模板

下标从一开始。 所有奇数等于本身&#xff0c;偶数/2等于所在层数。 二进制末尾有几个0就在第几层。 每一个树状数组中表示的都是这么一个区间的和&#xff0c;左开右闭。 写成lowbit(x)&#xff0c;返回的就是2^k&#xff0c;k就是末尾有几个0。 这是求和代码 单点修改 这是…