目标

设想,当角色所在的地面平坦时,双脚和地面贴合的高度,正是胶囊体与地面接触的高度,此时没有视觉上的问题。然而,当角色所在的地面不平坦时,双脚各自所在的位置,和胶囊体与地面接触的高度是不一样的,此时就会出现“脚部陷入地下”或者“脚部悬空”的视觉问题。

先不谈“脚部悬空”的问题。对于“脚部陷入地下”,IK是解决这个问题的一个途径。
在上一篇博客中《学习UE4动画蓝图:配置手部IK》中,我已经体验了IK功能并将其配置到手部,使得角色挥拳的时候拳头会被“墙”阻挡而不至于穿墙。对于现在脚部的处理,思路上很相似:都是使用射线检测计算骨骼期望到达的位置,然后以此启用IK。但是不同的是射线的方式不同:

  • 对于上一篇的“手部IK”:射线将从肘部射到手部靠前的位置。
  • 而对于这一篇的“脚部IK”:射线将在脚部的垂直线上,高度上从角色胶囊体与地面接触的高度到角色胶囊体半身的高度。

(本篇主要参考了官方的“内容示例”:)

1. 找到启用IK的骨骼名,添加插槽


左/右脚的骨骼分别为foot_l/foot_r
有一点需要注意,在foot_l这个骨骼的坐标系中,X轴(红色的)是向上的:

而在foot_r的坐标系中,X轴(红色的)是向下的:

记住这个差别。

随后,分别添加插槽LeftFootIKSocketRightFootIKSocket

要注意的是:插槽的位置并不是(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中更新脚部期望的偏移

首先,添加变量记录左右脚期望偏移的长度IKoffsetLeftFootIKoffsetRightFoot,随后在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 SpaceParent Bone Space的区别有待后续研究,但这里应该不是世界空间组件空间,因为用于确定“大腿-膝盖-脚”这三点平面的Joint Target Location应该需要和“大腿的旋转”相关的。

随后,确定一下Joint Target Location的值。

然后正式连接节点:

其中的RightFootEffectorLocationLeftFootEffectorLocation是新的变量,将在事件图表中传入。

4. 动画蓝图的 事件图表

这里的逻辑比较简单,就是根据角色蓝图中射线计算的高度偏移,去构造骨骼期望位置的Vector。

需要注意的是,正如在 【1. 找到启用IK的骨骼名,添加插槽】 提到的,右脚骨骼坐标系中,朝上的方向是(-1,0,0),而左脚坐标系中,朝上的方向是(1,0,0)

效果

将角色面向模式变为向前,然后在一个斜坡上,旋转。可以看到随着脚部的高度变化,膝盖的旋转也会相应调整到期望的状态。

脚部悬空问题的讨论

正如一开始讨论的,脚部贴合地面的问题包括“脚部陷入地下”和“脚部悬空”。由于射线的高度是从(脚部之上)的位置到(脚部),因此只能解决“脚部陷入地下”的问题。“脚部悬空”还是会有:

在《[UE4蓝图]虚幻4中完整实现脚部IK(二)(完结) - 知乎》中提到一个解决方法:
将人物的根骨骼朝下移动,距离刚好使那只离地面更近的脚能触及地面。
待后续实践。

学习UE4动画蓝图:配置脚部IK相关推荐

  1. 学习UE4动画蓝图:实现双脚贴地

    目标 在上一篇博客<学习UE4动画蓝图:配置脚部IK>中,IK功能解决了"脚部陷入地下"的问题,但是还是有"脚部悬空"的问题.<[UE4蓝图] ...

  2. 学习UE4动画蓝图:配置手部IK

    目标 逆向运动学(Inverse Kinematics)简称IK是相对于 "正向运动学" 的. "正向运动学" 即从骨骼的上级到下级进行旋转来达到自己想要的姿势 ...

  3. 学习UE4动画蓝图:创建一个射击姿势并使用

    目标 本篇的目标是从一个包含射击的动画序列中创建一个射击姿势,并让角色可以随时切换成"射击姿势".我的工程上接<使用UE4动画混合空间实现侧向和后退移动>,不过理论上只 ...

  4. UE4学习日记(九)脚部IK动画

    这次实现的功能是人物的脚部IK动画. 首先进入角色蓝图,声明需要用到的参数. 初始化两个参数IKScale和IKDistance.IKScale是预防角色变小之后,出现定位偏差. 然后是IKFootT ...

  5. [UE4] 动画蓝图的 Beginplay 事件不激活的解决办法:换用 Initialize 事件

    动画蓝图的 beginplay 事件接受的信号是父类的 beginplay 信号 而我是在角色蓝图的 beginplay 事件里面给角色的动画蓝图赋类引用的 因此父类受到 beginplay 信号的时 ...

  6. [玩转UE4动画系统]教程的大纲及设计思路

    本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式. 教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的玩转UE4动画系统 专栏. 教程中使用的资源及工程将以开源 ...

  7. UE4 脚部IK Foot Placement 的实现

    首先是思路 Foot Placement 其实就是通过IK动画调整骨骼把游戏角色的双脚固定在地面上,确保角色在斜坡或者凹凸的地形上时可以正确的将脚放 置在其表面上 : 文档链接 : https://d ...

  8. UE4 脚部IK实现

    脚步IK的目的是让角色的脚能够贴合地面,而不会因为胶囊体的缘故在上下坡时处于悬空状态,要实现IK的思路如下: 左边是没有IK的状态,由于胶囊体与墙面的阻挡,角色的双脚处于与地面平行的状态,两只脚不会与 ...

  9. ue4蓝图运行顺序_学习UE4,先学蓝图还是c++_资源库

    由于UE4编程从语言上划分为c++和蓝图脚本,所以学习UE4的人都会在蓝图和c++之中摇摆不定.下面为大家分享UE4蓝图和c++各自的优势与实用性,大家可以根据这些信息酌情选择先学习蓝图还是c++. ...

最新文章

  1. spring boot第六讲
  2. 计算机分组教学,中职计算机教学分组协作式学习论文
  3. P3723-[AH2017/HNOI2017]礼物【FFT】
  4. Sublime删除所有包含特定值的行
  5. php如何编写通信协议,定制通讯协议
  6. iOS 证书与签名 解惑详解
  7. 数据访问增删改查之单项查询
  8. Reading and Writing to Binary Files
  9. 虚拟局域网——vlan (讲解+配置)
  10. Kubernetes实战:高可用集群的搭建和部署
  11. Tarjan-有向图
  12. stm32f407 spi3 mosi没有输出_入门篇 | STM32F407寄存器开发点灯
  13. 从ajax获取的数据无法通过Jquery选择器来调用事件
  14. 烂泥:CentOS6.5光盘以及ISO镜像文件的使用
  15. Q103:磨边的物体(Beveled Objects)
  16. 王者-寻找庄家蛛丝马迹
  17. 让块元素在同一行显示的方法: float 和inline-block
  18. 英雄联盟LOL静态HTML网页制作模板DⅣ+CSS学生网页作品代码游戏题材大学生网页设计作业下载
  19. 行式 Excel 文件去重
  20. cwe_checker初识别

热门文章

  1. Python OpenCV(cv2) 摄像头开启+录像
  2. ios AFNetworking预期内容错误
  3. 常用表达-行为篇-Advice建议-请求指点 Asking for advice
  4. 写一个操作系统(1)
  5. 高DPI下部分软件显示不全的解决方法
  6. 马良建模学习笔记——软包制作四
  7. 如何在R代码中找到一个值的行号
  8. ClickHouse SQL 语法极简教程
  9. bugku_misc_三色绘恋
  10. kettle的api开发