主要是让角色的脚部跟随地形起伏而抬起或倾斜,同时脚掌贴合地面。unity动画系统本身就提供了IK设置的API,却没有整合成为一个在Editor可以配置的工具,要自己去实现一套逻辑。
IK Position
原理是从脚部上方向下做一个Raycast,找出碰撞点,将其设为脚部的IK Goal,要注意的是必须同时把整个body的y坐标也跟着脚部的y坐标做偏移,而且是以y值最小的那一只脚做基准,否则会出现奇怪现象,比如脚伸到最直都够不到地面:
IK Rotation
IK Rotation控制脚掌贴合地面的同时,要保留脚掌绕其本地y轴原有的转角,若一味按照碰撞点的normal来设置IK角度,默认脚尖朝向正前方,则有可能导致扰乱了原动作姿势:
脚本代码上传到了GitHub,点击转跳
参考资料
Build a Foot IK System from Scratch for Unity (C#) 出自Filmstorm