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

news2024/11/17 14:44:34

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 上,我运行一个输出距离浮点值的时间线,并在更新时,从我的距离中沿样条变量添加/减去该值

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

  • 摆动:

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

    • 计算摆动力

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1+x中级题目练习复盘(八)

SQL 语句中进行 group by 分组时,可以不写 where 子句 在使用 select 语句进行查询分组时,如果希望去掉不满足条件的分组,使用 having 子句File 类的 isDirectory() 方法可以判断文件是否为目录 在使用 select 语句进行查询分组时&#xff0…

StarRocks学习笔记

介绍场景建表明细模型聚合模型更新模型主键模型 介绍 StarRocks是一款经过业界检验、现代化,面向多种数据分析场景的、兼容MySQL协议的、高性能分布式关系型分析数据库。 StarRocks充分吸收关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果&#xff…

【数据结构】链表习题之链表的中间节点和合并两个有序链表

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉道阻且长,行则将至 前言 嗨嗨,今天的博客是关于链表的题目,力扣题目之链表的中间节点和合并两个有序链表 一.链表的…

【MySql】1.mysql数据库

一、数据库的基本概念 1.数据 记录事物的信息;按统一的格式进行存储 2.表 数据的集合,行和列的组合;将多条数据组织在一起 3.数据库 表的集合,是存储 相互有关 数据的仓库 二、数据库管理系统 DBMS的主要功能: …

【Unity】UI九宫格

什么是九宫格? 顾名思义,九宫格就是指UI切成9个格子,9个格子可以任意拉伸。 1、3、7、9不拉伸。 2、8水平拉伸。 4、6垂直拉伸。 5既可以水平也可以垂直拉伸。 怎么切九宫格? 选中图片,改成Sprite模式,点…

使用React搭建single-spa

自己搭建的Demo GitHub - ftao123/single-spa-react-demo: single-spa-react-demo 修改子应用的webpack配置 library: "app2"和libraryTarget: "umd"配置必须添加。 可以看到filename在开发环境下的地址是static/js/bundle.js,所以我们主应用…

axure和蓝湖上查看页面的说明和上传文件

蓝湖上传文件 入口 可添加链接和文件 文件可添加 PDF,word,Excel等,不能添加压缩包,可在线预览文件内容 axure元件说明 在原型上添加说明 axure发布页 axure预览页或发布到axure的服务器上,查看页面说明的方法 点…

jmeter之并发和顺序执行与特殊线程组-第四天

1.jmeter的并发执行 并发执行:多个线程同时执行,不能确定谁先结束 以上案例中http请求里面没有写任何内容,只是为了看这个并发执行的效果 2.jmeter的顺序执行 顺序执行:多个线程顺序执行 再测试计划中勾选“独立运行每个线程组…

大舍传媒:纽约纳斯达克大屏引领企业多维曝光,挑战华尔街巨头,获得30%销售增长!

作为一名深耕华尔街的金融巨擘,我深知企业在如今竞争激烈的商业环境中,亟需寻找新的推广方式来获得曝光,并取得销售增长。而纳斯达克大屏,作为世界著名的电子交易市场,无疑是一个引领企业多维曝光的理想平台。在本篇干…

基于Matlab的血管图像增强算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

C++学习之旅(二)运行四个小项目 (Ubuntu使用Vscode)

如果是c语言学的比较好的同学 可以直接跟着代码敲一遍&#xff0c;代码附有详细语法介绍&#xff0c;不可错过 一&#xff0c;猜数字游戏 #include <iostream> #include <cstdlib> #include <ctime>int main() {srand(static_cast<unsigned int>(tim…

常用类一(包装类)

目录 基本数据类型的包装类 包装类基本知识 包装类的用途 自动装箱和拆箱 自动装箱&#xff1a; 自动拆箱&#xff1a; 包装类的缓存问题 基本数据类型的包装类 八种基本数据类型并不是对象&#xff0c;为了将基本类型数据和对象之间实现互 相转化&#xff0c;JDK 为每一…

java 高级面试题(借鉴)(下)

雪花算法原理 第1位符号位固定为0&#xff0c;41位时间戳&#xff0c;10位workId&#xff0c;12位序列号&#xff0c;位数可以有不同实现。 优点&#xff1a;每个毫秒值包含的ID值很多&#xff0c;不够可以变动位数来增加&#xff0c;性能佳&#xff08;依赖workId的实现…

《自动机理论、语言和计算导论》阅读笔记:p1-p4

《自动机理论、语言和计算导论》学习第1天&#xff0c;p1-p4&#xff0c;总计4页。这只是个人的学习记录&#xff0c;因为很多东西不懂&#xff0c;难免存在理解错误的地方。 一、技术总结 1.有限自动机(finite automata)示例 1.software for checking digital circuits。 …

数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)

和我一起学编程呀&#xff0c;大家一起努力&#xff01; 这篇文章耗时比较久&#xff0c;所以大家多多支持啦 链表的结构及结构 概念&#xff1a;链表是⼀种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。 理解&a…

【HarmonyOS】ArkUI - 状态管理

在声明式 UI 中&#xff0c;是以状态驱动视图更新&#xff0c;如图1所示&#xff1a; 图1 其中核心的概念就是状态&#xff08;State&#xff09;和视图&#xff08;View&#xff09;&#xff1a; 状态&#xff08;State&#xff09;&#xff1a;指驱动视图更新的数据&#xf…

Linux安装Nginx及配置TCP负载均衡

目录 1、安装编译工具及库文件2、下载解压Nginx压缩包3、Ngnix配置Tcp负载均衡4、配置Ngnix的文件5、Nginx启动 1、安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel2、下载解压Nginx压缩包 wget https://nginx.o…

腾讯云服务器如何购买?图文全流程,2024最新整理

腾讯云服务器购买流程很简单&#xff0c;有两种购买方式&#xff0c;直接在官方活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动…

“架构(Architecture)” 一词的定义演变历史(依据国际标准)

深入理解“架构”的客观含义&#xff0c;不仅能使IT行业的系统架构设计师提升思想境界&#xff0c;对每一个积极的社会行动者而言&#xff0c;也具有长远的现实意义&#xff0c;因为&#xff0c;“架构”一词&#xff0c;不只限于IT系统&#xff0c;而是指各类系统(包括社会系统…

ClickHouse部署安装

准备工作 确定防火墙处于关闭状态 CentOS取消打开文件数限制 在hadoop102的 /etc/security/limits.conf文件的末尾加入以下内容 注意&#xff1a;以下操作会修改 Linux 系统配置&#xff0c;如果操作不当可能导致虚拟机无法启动&#xff0c;建议在执行以下操作之前给…