FinalIK反向动力学插件学习

1.Full Body Biped IK组件

全局属性

FixTransform              刷新IK位置(不勾选该选项时,拖动骨骼点,人物会像在太空运动)

Weight                        表示应用程度

Iterations                   更新其他点的频率。当不用时可改为0,这样托动手时,只有手动,其他部位不会受到影响

Body属性                

UseThighs                使用大腿肌肉,默认勾选,运动会缓和更柔和。

Spine                       是腹部(胸腔)那一块位置。权重应为1,这样旋转拉伸时,胸腹会跟着身体动,胸腹不会因为其他位置变化而变形了

MaintainHeadRot     头部默认动画占的权重。当为0时,头部不跟着其他位置动,保持原动画。1时,很柔和了

Arm手臂

重点了解Target属性,比如Hand下的Target,拖动场景内物体至Target中,然后调整Position Weight权重为1,此时拖动Target物体,可以发现人物手部会跟随物体移动

代码控制

设置总权重

GetComponent<FullBodyBipedIK>().solver.SetIKPositionWeight(1);

设置左右Arm、左右腿

GetComponent<FullBodyBipedIK>().solver.SetChainWeights(FullBodyBipedChain.LeftArm,1, 1);

设置权重:Body位置、左右手、脚、肩膀、大腿Thigh

GetComponent<FullBodyBipedIK>().solver.SetEffectorWeights(FullBodyBipedEffector.Body,1, 1);

2.Aim Ik组件—瞄准组件

Target                  瞄准的物体

Pole Target        物体的位置可以控制人物左右探头(如枪战游戏的左右探头效果)

Aim Transform  使用哪个部位瞄准目标(一般使用在枪口新建空物体,使用该空物体)

Axis                   将aim target的轴指向目标,默认为z轴,一般不修改

weight               混合IK效果的权重,与clampWeight 配合使用

clampWeight      solver的旋转取值。 0是自由旋转,1是完全固定到没有效果。
一般weight为1,clampWeight为0.5左右

Bones              拖入人体骨骼,一般为脊柱到脖子,然后调整各骨骼的Weight权重,表示人体随目标转动时各部位的影响程度,一般脖子越往下权重越低

3.Grounder Full Body Biped IK组件---人物脚部贴合地形

使用该组件,人物需要有Full Body Biped IK

Layers                 脚步检测的层级,需要与地形的层级一致

Max Step            最大抬脚高度

重点了解Spine--人物爬坡之类运动时全身骨骼都会有一定影响,在Spine中添加元素,选择EffectorType,调节Weight即可完成人物运动时该部位受影响权重

4.Interaction System------交互系统,即人物与按钮,门等物体的交互

使用该系统需要在人物上加Full Body Biped IK组件,然后增加Interaction System组件,然后目标物体需要有Interaction Object组件,然后添加Weight Curves,选择Type并配置曲线,然后可以增加Event事件,可选择交互时暂停(Pause)和拾取(Pick Up)。

然后给人物添加简单脚本,如下

public class FinalIKInteractionController : MonoBehaviour
{
    public InteractionSystem Interaction_System;

    public InteractionObject Interaction_Object;

    void Update()
    {

        if(Input.GetKeyDown(KeyCode.Space))
        {

            //此处选择与物体交互使用哪个部位
            Interaction_System.StartInteraction(FullBodyBipedEffector.LeftHand,Interaction_Object, true);
        }

        else if (Input.GetKeyDown(KeyCode.B))
        {
            //取消暂停
            Interaction_System.ResumeAll();
        }
    }
}

若需要手与物体贴合的更好,需要复制模型手部,调整手指旋转,并复制一份到目标物体下作为目标物体的子物体,然后给该子物体添加Interaction Target组件,将目标物体赋给Pivot,并调整Twist Axis旋转轴,可完成人物与物体交互时手部的自然感。

然后还可以给物体添加Animation动画,实现按按钮、开门等动画交互效果。

具体效果调整可参考Unity插件教程合集中FinalIk教程第5讲。

5.CCDIK---自定义骨骼关节

CCDIK适用于非人体骨骼,存在多个关节的物体,如多关节机械臂。

其中Target、Weight、等参数与之前的无异,主要是Bones需要将机械臂的关机分别加载进入并调节Weight即可,有时需要限制机械臂个骨骼节点的旋转,可以添加

Rotation Limit Angle(锥形范围限制),Rotation Limit Hinge(扇形范围限制)