一、术语解释
正向运动力学:
通过改变父节点,子节点随之自然而然改变,为正向运动学。
反向运动学 IK :
通过设定某关节状态,其父节点经过计算发生改变。这是反向运动学。比如用在脚接触不同地面,自动计算身体状态,就比较实用。
二、预览查看效果
1、导入Final IK SDK,导入人形模型
2、给人形模型根节点添加 FullBodyBipedIK 脚本
3、设置该脚本的左手权重为1,在Scene视图会看到蓝色方块,运行游戏,拖动它即可看到效果。
三、FullBodyBipedIK 属性讲解
1、全局属性
FixTransform:刷新IK位置(在不勾选Animator和该选项时,人物像太空运动。)
Reference:里面为骨骼节点,示例作用,你可以获取该节点上的碰撞,作为枪击判断等
Weight:权重,该地方权重为整体权重。
Iterations:更新其他节点的频率。当你不用时就可改为0,这样拖动手,只有手动,胳膊身体等就不跟着刷新去运动了。
2、Body
UseThighs:使用大腿肌肉,默认勾选,运动会缓冲更柔和。不勾选和勾选效果如下:
Mapping:
Spine:是腹部(胸腔)那一块位置。权重应为1,这样旋转拉伸时,胸腹会跟着身体动,胸腹不会因为其他位置变化而变形了。
MaintainHeadRot:头部默认动画占的权重。当为0时,头部不跟着其他位置动,保持原动画。1时,很柔和了
3、Arm
Chain:
pull:左右手,一个在前,一个在后(向前向后都到极限,类似伸直手臂状态)。身体在中间。谁的Pull越大,整个身体越拉向谁(当然会跟着变形匹配动作),接近谁。
Reach:左右手,一个在前,一个在后(向前向后都到极限,类似伸直手臂状态)。胸腔部分在中间。谁的Reach越大,胸腔越拉向谁,接近谁。
Push:左右手,一个在前,一个在后(蜷缩着手臂,类似冷,螳螂手半缩在胸前一样)。胸腔部分在中间。谁的Push越大,身体就被推向后方
Smoothing:平滑运动的方式
BendGoal:手肘(大臂和小臂关节处)外翻朝向。新建一个空物体,赋值给它。控制这个空物体的位置,手肘指向这个位置。
MappingWeight:父骨骼权重。默认1,当为0时,拖动手,胳膊不会反向计算运动,只会笔直运动,身体其他位置会计算运动。
MaintainHandRot:手部默认动画占的权重。当为0时,全由IK计算动画,很柔和。当为1时,是默认动画(前提胳膊处的权重要为0) 有点暴力。。。
四、代码控制
参考:FinalIK官网Full Body Biped IK
1、总权重:
GetComponent<FullBodyBipedIK>().solver.SetIKPositionWeight(1);
2、权重:Pull、Reach:设置左右Arm、左右腿
GetComponent<FullBodyBipedIK>().solver.SetChainWeights(FullBodyBipedChain.LeftArm,1, 1);
3、权重:Body位置、左右手、脚、肩膀、大腿Thigh
GetComponent<FullBodyBipedIK>().solver.SetEffectorWeights(FullBodyBipedEffector.Body,1, 1);