• 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().solver.SetIKPositionWeight(1);

    设置左右Arm、左右腿

    GetComponent().solver.SetChainWeights(FullBodyBipedChain.LeftArm,1, 1);

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

    GetComponent().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)。

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

    1. public class FinalIKInteractionController : MonoBehaviour
    2. {
    3.     public InteractionSystem Interaction_System;
    4.     public InteractionObject Interaction_Object;
    5.     void Update()
    6.     {
    7.         if(Input.GetKeyDown(KeyCode.Space))
    8.         {
    9.             //此处选择与物体交互使用哪个部位
    10. Interaction_System.StartInteraction(FullBodyBipedEffector.LeftHand,Interaction_Object, true);
    11.         }
    12.         else if (Input.GetKeyDown(KeyCode.B))
    13.         {
    14.             //取消暂停
    15.             Interaction_System.ResumeAll();
    16.         }
    17.     }
    18. }

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

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

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

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

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

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

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

  • 相关阅读:
    组合系列--有排列就有组合
    Qt中的单例模式
    华为HCIE技术(HCIP、HCIE)汇总
    STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于GPIO)
    与set和map相关的OJ题练习
    微服务-微服务Spring Security6实战
    【JavaEE】多线程进阶(一)饿汉模式和懒汉模式
    mysql报SQLSTATE[22007]的错误的一个原因
    【Verilog】用双口RAM实现同步FIFO
    Docker之查看并获取最新Ubuntu镜像(十)
  • 原文地址:https://blog.csdn.net/qq_42720695/article/details/133025273