Animation Rigging 如何让你的Avatar人物更具灵活性

时间:2022-11-21 12:52:14


???? 简介

Animation RiggingUnity官方发布的可以对Avatar人物骨骼进行约束的工具,已经有稳定的经过验证的Vertified包体,可以将其理解为一个IK工具,使用它可以让我们的人物动作表现更具灵活性。

Animation Rigging 如何让你的Avatar人物更具灵活性

???? 基本组件

  • Rig Builder
    依赖Animator组件,所以将其与AvatarAnimator组件挂载于同一个物体上,支持同时控制多个Rigs,帮助我们实现动画融合

Animation Rigging 如何让你的Avatar人物更具灵活性

  • Bone Renderer
    骨骼可视化组件,方便我们进行编辑、绑定,只需要将所有的骨骼节点添加到Transform集合中。

Animation Rigging 如何让你的Avatar人物更具灵活性
添加完成后,在Scene窗口看到Avatar的骨骼可以被渲染出来:

Animation Rigging 如何让你的Avatar人物更具灵活性

  • Rig
    约束控制组件,与骨骼根节点位于同一层级,将其添加到Rig Builder组件的Rig Layers列表:

Animation Rigging 如何让你的Avatar人物更具灵活性
Animation Rigging 如何让你的Avatar人物更具灵活性

???? 应用

本文以两处用例来表现Animation Rigging的作用,使用的环境如下:

  • Unity 2022.3.33
  • Animation Rigging 1.0.3

Aim Constraint

例如你想使你场景中的NPC一直“关注”你,可以使用Aim Constraint瞄准约束:

Animation Rigging 如何让你的Avatar人物更具灵活性

  • Constrained Object:被约束的物体,这里的Head是NPC的头部骨骼节点。
  • Source Objects:目标物体,这里的Head是Player的头部骨骼节点,表示NPC的头部一直看向Player的头部。
  • Constrained Axes:被约束的轴,这里只使用Y轴,表示只控制NPC头部的Y轴旋转。
  • Min/Max Limit:最小最大值限制,用于限制NPC的头部旋转角度在指定范围内。

Animation Rigging 如何让你的Avatar人物更具灵活性

Two Bone IK Constraint

例如你想使美术提供的动作与你场景的物体更加“契合”,可以使用Two Bone IK Constraint约束,这里以一个Sit Down坐下的动作为例,如下图所示,我们可以发现Avatar坐下后胳膊与我们场景中的椅子并不是很"契合":

Animation Rigging 如何让你的Avatar人物更具灵活性
接下来我们为其添加Two Bone IK Constraint来改善Sit Down动作的表现:

Animation Rigging 如何让你的Avatar人物更具灵活性
RootMidTip是我们想要进行约束的骨骼节点,Source Objects中的Target是新建的一个空节点,用于控制Avatar的胳膊到指定的位置,我们将其拖到椅子的把手位置:

Animation Rigging 如何让你的Avatar人物更具灵活性
左胳膊进行约束后的效果:

Animation Rigging 如何让你的Avatar人物更具灵活性
我们可以通过插值方式来控制Weight权重数值,让约束效果逐渐起作用,使其融合进我们的Sit Down动作过程中。

Animation Rigging中有多种约束类型,合理使用可以让我们的Avatar人物更加活灵活现。

using UnityEngine;
using UnityEngine.Animations.Rigging;

public class Example : MonoBehaviour
{
    [SerializeField] private Animator animator;
    [SerializeField] private TwoBoneIKConstraint constraint;

    private void Update()
    {
        var casi = animator.GetCurrentAnimatorStateInfo(0);
        if (casi.IsName("sitdown"))
        {
            constraint.weight = casi.normalizedTime;
        }
    }
}

Animation Rigging 如何让你的Avatar人物更具灵活性