开门手臂自动弯曲
实现效果:人物做出抬手的开门动画时,若手臂碰到静态网格物体,拳头不会穿过物体,而是会产生手臂IK弯曲动画效果。
重要参考资料:
学习UE4动画蓝图:配置手部IK_YakSue的博客-CSDN博客_ue4手部ik
[UE4蓝图]虚幻4中完整实现脚部IK(一) - 知乎
Unreal Engine 4 Tutorial - IK Part 5 - Hands IK_哔哩哔哩_bilibili
https://docs.unrealengine.com/5.1/zh-CN/ik-rig-in-unreal-engine/
原理:
逆向运动学(Inverse Kinematics)简称IK是相对于 “正向运动学” 的。
“正向运动学” 即从骨骼的上级到下级进行旋转来达到自己想要的姿势,这是一个正向的思维。与此相对的,“逆向运动学” 是已知最后想要达成的姿势,然后反求出骨骼们的旋转。
一、前期准备工作
1、自制开门动画
这里我们不用网络上的动画资源,自己利用小白人现有的Idel动画资源,调整右手臂姿态,打上关键帧,这里不用删除时间轴上的帧,让它时间长度和默认Idel保持同步就好。不建议时间太短
2、蒙太奇
这里混入混出都不要,改为0。不需要过渡
3、实现抬手开门动画
可以直接在人物蓝图里调用播放蒙太奇节点,我这里放到动画图表中去实现了,同样的效果。
通过以上几张图片,实现了按E播放开门蒙太奇动画,松开E就停止播放蒙太奇动画。这里有个小bug,即蒙太奇本身也是有时间的,所以就算长按E,开门动画也只能保持一定时间后就停止。所以可以进去蒙太奇中将动画资源循环播放。
二、手部IK
1、创建“双骨骼IK节点”
UE4里,IK的主要是由双骨骼IK节点实现的。先创建一个:
这个是添加在右手上的IK。
这个节点重点注意Effector Location,这个就是Maya骨骼内容中IK控制柄的末关节上的末端效应器。
蓝色十字即是末端效应器Effector Location,它控制着末关节的位置,父关节的形态位置则会通过IK解算器自动解算。
Joint Target Location 则对应着极向量控制器,决定了IK弯曲的方向。
这里重点就在获取到Effector Location的位置。
思路:通过手臂射线,获取到物体和手臂碰撞的位置点,将这个位置点赋予Effector Location,通过“双骨骼IK节点”的解算,实现IK效果。
2、添加插槽
3、射线函数的创建
4、动画蓝图
数据传递
动画图表
解决IK抖动问题:(不能完全解决,特殊角度还是会出现这个问题)
原因可能是手部插槽决定了射线的终点位置,当IK触发时,插槽位置刚好和射线碰撞点位置重叠了,此时射线是Hit还是没Hit?检测不稳定,导致动画蓝图的布尔姿势混合出现两种姿态的来回跳动,导致抖动。
所以插槽设置在了靠前的位置,会改善这个情况。
此时再碰撞,手部正好在碰撞点,但是插槽位置更靠前,因此射线检测一般会检测到碰撞 。但是特殊情况,比如侧身位,还是可能出现插槽位置和碰撞位置重叠的情况。
靠墙手自动扶墙
这种效果相对简单点,射线也改由肩膀直接向前(get actor forward vector)发出射线即可,不需要事先做抬手动作,需要加一个骨骼变换,调整扶墙手掌的姿态。
具体看
Unreal Engine 4 Tutorial - IK Part 5 - Hands IK_哔哩哔哩_bilibili