学习UE4动画蓝图:配置脚部IK
目标
设想,当角色所在的地面平坦时,双脚和地面贴合的高度,正是胶囊体与地面接触的高度,此时没有视觉上的问题。然而,当角色所在的地面不平坦时,双脚各自所在的位置,和胶囊体与地面接触的高度是不一样的,此时就会出现“脚部陷入地下”或者“脚部悬空”的视觉问题。
先不谈“脚部悬空”的问题。对于“脚部陷入地下”,IK是解决这个问题的一个途径。
在上一篇博客中《学习UE4动画蓝图:配置手部IK》中,我已经体验了IK功能并将其配置到手部,使得角色挥拳的时候拳头会被“墙”阻挡而不至于穿墙。对于现在脚部的处理,思路上很相似:都是使用射线检测计算骨骼期望到达的位置,然后以此启用IK。但是不同的是射线的方式不同:
- 对于上一篇的“手部IK”:射线将从肘部射到手部靠前的位置。
- 而对于这一篇的“脚部IK”:射线将在脚部的垂直线上,高度上从角色胶囊体与地面接触的高度到角色胶囊体半身的高度。
(本篇主要参考了官方的“内容示例”:)
1. 找到启用IK的骨骼名,添加插槽
左/右脚的骨骼分别为foot_l
/foot_r
。
有一点需要注意,在foot_l
这个骨骼的坐标系中,X轴(红色的)是向上的:
而在foot_r
的坐标系中,X轴(红色的)是向下的:
记住这个差别。
随后,分别添加插槽LeftFootIKSocket
和RightFootIKSocket
:
要注意的是:插槽的位置并不是(0,0,0)
,而是更靠下正好到脚底板的高度。我调成了:
2. 角色蓝图中做射线操作
在之前配置手部IK时,射线操作被放到了动画蓝图的事件图表中,而现在希望能放到角色蓝图中。其实并没有严格规定必须放在哪里,可能需要根据二者的环境谁更方便来决定。在这里,由于我想访问角色胶囊体,因此我觉得在角色蓝图中访问更方便。
2.1 在构造函数中设定射线距离
创建一个新的变量IKFootTraceDistance
。由于它是固定的,因此在构造函数中计算赋值:
逻辑是:直接使用胶囊体组件中胶囊体的半身距离。
2.2 IK Foot Trace 函数
新建一个函数IK Foot Trace
:
它将用来做左右脚的射线计算,输入是“射线距离”与“插槽的名字”,输出的是射线交点相对于骨骼的偏移:
逻辑是(图中注释框的标题描述不准确):
- 插槽的位置决定了射线的X、Y值
- 高度上(Z值):
GetActorLocation
得到的是胶囊体中心点,此高度是中心距离,而它减去的TraceDistance
正好是胶囊体的半身,因此得到的高度是不考虑IK时脚应该所在的高度。
2.3 在Tick中更新脚部期望的偏移
首先,添加变量记录左右脚期望偏移的长度IKoffsetLeftFoot
和IKoffsetRightFoot
,随后在Tick中调用刚才的IK Foot Trace函数
计算(注意要填写各自的插槽名)。
3. 动画蓝图的 AnimGraph 中添加IK节点
和之前设置手部IK节点一样,为了调节Joint Target Location
,可以先连一个简单的,进行预览观察:
不过需要注意的是它的参数:
- IKBone是末端的骨骼
foot_r
,和之前没有区别 - Effector Location Space选择为了
Bone Space
,并且Effector Target是foor_r
,这样之后输入的Vector应该是相对于这个骨骼的偏移。 - Joint Target Location Space选择为了
Parent Bone Space
,并且Joint Target选择为了thigh_r
。关于Bone Space
和Parent Bone Space
的区别有待后续研究,但这里应该不是世界空间
和组件空间
,因为用于确定“大腿-膝盖-脚”这三点平面的Joint Target Location应该需要和“大腿的旋转”相关的。
随后,确定一下Joint Target Location的值。
然后正式连接节点:
其中的RightFootEffectorLocation
和LeftFootEffectorLocation
是新的变量,将在事件图表中传入。
4. 动画蓝图的 事件图表
这里的逻辑比较简单,就是根据角色蓝图中射线计算的高度偏移,去构造骨骼期望位置的Vector。
需要注意的是,正如在 【1. 找到启用IK的骨骼名,添加插槽】 提到的,右脚骨骼坐标系中,朝上的方向是(-1,0,0)
,而左脚坐标系中,朝上的方向是(1,0,0)
。
效果
将角色面向模式变为向前,然后在一个斜坡上,旋转。可以看到随着脚部的高度变化,膝盖的旋转也会相应调整到期望的状态。
脚部悬空问题的讨论
正如一开始讨论的,脚部贴合地面的问题包括“脚部陷入地下”和“脚部悬空”。由于射线的高度是从(脚部之上)的位置到(脚部),因此只能解决“脚部陷入地下”的问题。“脚部悬空”还是会有:
在《[UE4蓝图]虚幻4中完整实现脚部IK(二)(完结) - 知乎》中提到一个解决方法:
将人物的根骨骼朝下移动,距离刚好使那只离地面更近的脚能触及地面。
待后续实践。
学习UE4动画蓝图:配置脚部IK相关推荐
- 学习UE4动画蓝图:实现双脚贴地
目标 在上一篇博客<学习UE4动画蓝图:配置脚部IK>中,IK功能解决了"脚部陷入地下"的问题,但是还是有"脚部悬空"的问题.<[UE4蓝图] ...
- 学习UE4动画蓝图:配置手部IK
目标 逆向运动学(Inverse Kinematics)简称IK是相对于 "正向运动学" 的. "正向运动学" 即从骨骼的上级到下级进行旋转来达到自己想要的姿势 ...
- 学习UE4动画蓝图:创建一个射击姿势并使用
目标 本篇的目标是从一个包含射击的动画序列中创建一个射击姿势,并让角色可以随时切换成"射击姿势".我的工程上接<使用UE4动画混合空间实现侧向和后退移动>,不过理论上只 ...
- UE4学习日记(九)脚部IK动画
这次实现的功能是人物的脚部IK动画. 首先进入角色蓝图,声明需要用到的参数. 初始化两个参数IKScale和IKDistance.IKScale是预防角色变小之后,出现定位偏差. 然后是IKFootT ...
- [UE4] 动画蓝图的 Beginplay 事件不激活的解决办法:换用 Initialize 事件
动画蓝图的 beginplay 事件接受的信号是父类的 beginplay 信号 而我是在角色蓝图的 beginplay 事件里面给角色的动画蓝图赋类引用的 因此父类受到 beginplay 信号的时 ...
- [玩转UE4动画系统]教程的大纲及设计思路
本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式. 教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的玩转UE4动画系统 专栏. 教程中使用的资源及工程将以开源 ...
- UE4 脚部IK Foot Placement 的实现
首先是思路 Foot Placement 其实就是通过IK动画调整骨骼把游戏角色的双脚固定在地面上,确保角色在斜坡或者凹凸的地形上时可以正确的将脚放 置在其表面上 : 文档链接 : https://d ...
- UE4 脚部IK实现
脚步IK的目的是让角色的脚能够贴合地面,而不会因为胶囊体的缘故在上下坡时处于悬空状态,要实现IK的思路如下: 左边是没有IK的状态,由于胶囊体与墙面的阻挡,角色的双脚处于与地面平行的状态,两只脚不会与 ...
- ue4蓝图运行顺序_学习UE4,先学蓝图还是c++_资源库
由于UE4编程从语言上划分为c++和蓝图脚本,所以学习UE4的人都会在蓝图和c++之中摇摆不定.下面为大家分享UE4蓝图和c++各自的优势与实用性,大家可以根据这些信息酌情选择先学习蓝图还是c++. ...
最新文章
- spring boot第六讲
- 计算机分组教学,中职计算机教学分组协作式学习论文
- P3723-[AH2017/HNOI2017]礼物【FFT】
- Sublime删除所有包含特定值的行
- php如何编写通信协议,定制通讯协议
- iOS 证书与签名 解惑详解
- 数据访问增删改查之单项查询
- Reading and Writing to Binary Files
- 虚拟局域网——vlan (讲解+配置)
- Kubernetes实战:高可用集群的搭建和部署
- Tarjan-有向图
- stm32f407 spi3 mosi没有输出_入门篇 | STM32F407寄存器开发点灯
- 从ajax获取的数据无法通过Jquery选择器来调用事件
- 烂泥:CentOS6.5光盘以及ISO镜像文件的使用
- Q103:磨边的物体(Beveled Objects)
- 王者-寻找庄家蛛丝马迹
- 让块元素在同一行显示的方法: float 和inline-block
- 英雄联盟LOL静态HTML网页制作模板DⅣ+CSS学生网页作品代码游戏题材大学生网页设计作业下载
- 行式 Excel 文件去重
- cwe_checker初识别