Version: 1.7
语言 : 中文
节点功能与分类
CodeBase 节点介绍

Animation 节点介绍

动画节点仅在 AnimGraph 中使用,输出为姿势(Pose),连接至 Output 节点可将姿势应用于角色。AnimGraph 主要包含 Clip、Blend、BlendMask、Controller、StateMachine、RigGraph、IK、Retarget 等节点类型。本节介绍除 RigGraphIKRetarget 之外的动画节点。


Clip 节点

对应 AnimationClip 资产,用于播放单一动画片段。

节点样式
Clip 节点

功能特性

  • 可设置播放速度(Speed)和足部 IK(FootIK)
  • 底部进度条在播放时会实时更新
  • 支持从资产库拖拽 AnimationClip 到图中直接创建节点:

拖拽创建演示

属性面板
通过 Inspector 可配置动画片段及其他参数,包含预览功能:
Clip 节点属性设置


Blend 系列节点

Blend Two

混合两个输入姿势(Pose),通过 Alpha 值(0–1)控制混合权重:

  • Alpha:B 端口的权重
  • A 端口权重 = 1 - Alpha
Blend Two 节点
Blend Two 节点

Blend Multi

混合多个输入姿势,每个姿势可独立设置权重:

Blend Multi 节点
Blend Multi 节点

操作方式

  • 右键点击节点可增删输入端口:

增加端口

删除端口

  • Inspector 中可启用权重归一化(Normalize):
    权重归一化设置

Blend Tree

基于参数动态混合多个子运动:

Blend Tree 节点
Blend Tree 节点

属性面板
通过 Inspector 设置混合类型、参数和运动列表:
Blend Tree 属性面板

混合类型

1. Simple 1D:单参数混合

1D混合

2. Simple Directional 2D:二维参数混合

2D混合

BlendTree 管理

  • 可在 Motion List 中增删/修改子运动
  • 可在 Preview Parameter 中修改用于预览混合结果的参数,在 Preview 窗口中实时预览混合结果,此处的设置仅用于预览
  • BlendTree 节点的输入端口 ParameterX 和 ParameterY 可以与输出 float 类型的节点相连,作为用于播放的混合参数
  • 勾选框 UseAsset 用于切换使用模式
    • 没有勾选 UseAsset 时,使用常规编辑模式,可自定义编辑 BlendTree 所有属性
    • 勾选 UseAsset 时,使用只读资产模式,可以选择 TBlendTree 资产,在只读模式下应用资产属性

Apply Additive

在 Base 端口连接的动画的基础上,以 additive 模式叠加 Additive 端口连接的动画,Alpha 端口设置叠加权重。

Additive 端口连接的动画需要在动画的Import Settings -> Animation -> Additive Type 中设置 additive 类型:

  • Additive Type
    1. No Additive:直接使用原动画作为 Additive 模式动画,不做处理
    2. Local Space:原动画相对于指定参考姿势的相对变化量作为 Additive 模式动画
  • Base Pose Type
    1. Avatar Reference Pose:使用 AnimGraph 使用的 Avatar 资产的默认静止姿势作为参考姿势
    2. Frame from this Animation:使用原动画的某一帧作为参考姿势
      • Reference Frame Index:指定帧序号
    3. Selected Animation Frame:使用指定动画的某一帧作为参考姿势
      • Additive Reference Clip:指定参考动画
      • Reference Frame Index:指定帧序号

LayerMixer (BlendMask) 节点

在 BlendMulti 基础上增加骨骼遮罩(AvatarMask)和混合模式选项:

BlendMask 节点
BlendMask 节点

核心特性

  • 第 0 个 Pose 作为基础姿势
  • 支持层级混合(自上而下)

操作方式

  • 右键增删输入端口:

增加端口

删除端口

属性配置
通过 Inspector 设置骨骼遮罩和混合模式:
LayerMixer 属性面板

混合模式

  • Additive(叠加):将当前姿势叠加到前一结果
  • Overwrite(覆盖):直接覆盖骨骼数据

以下是一个较为完整的BlendMask功能,基本动作(Pose 0)是一个状态机,里面的motion是全身动作,而Pose1和Pose2是上半身的动作,和攻击动作

LayerMixer(BlendMask)示例
LayerMixer(BlendMask)示例

Controller 节点

用于兼容 AnimatorController Asset:

Controller 节点
Controller 节点

创建方式

  • 拖拽 AnimatorController 到图中
  • 通过搜索栏创建

参数同步: Inspector 中可将 Controller 参数同步到 AnimGraph:

参数同步界面
参数同步界面

⚠️ 同名但类型不同的参数会触发警告

AnimationGraph 中 StateMachineBehavior 的特殊处理

函数命名规范

在 AnimationGraph 环境下使用 StateMachineBehavior 时,所有状态回调函数需要遵循特殊命名规则:

标准函数名 AnimationGraph 专用函数名
OnStateEnter OnAGStateEnter
OnStateExit OnAGStateExit
OnStateUpdate OnAGStateUpdate
OnStateMove OnAGStateMove
OnStateIK OnAGStateIK
OnStateMove OnAGStateMove
OnStateMachineEnter OnAGStateMachineEnter
OnStateMachineExit OnAGStateMachineExit

参数变更说明

函数签名需要做以下调整:

  1. 首个参数类型变更

  2. 原类型:Animator

  3. 新类型:GameObject

  4. 其他参数保持不变

代码示例对比

// 标准实现
override public void OnStateExit(Animator animator, 
                              AnimatorStateInfo stateInfo, 
                              int layerIndex)
{
    // 实现代码
}

// AnimationGraph 专用实现
override public void OnAGStateExit(GameObject gameObject,
                                AnimatorStateInfo stateInfo,
                                int layerIndex)
{
    // 实现代码
}

⚠️ 重要注意事项

  1. 函数前缀要求
    • 必须严格按照规范添加 AG 前缀(如 OnAGStateEnter
    • 缺少前缀将导致状态回调无法被触发
  2. 参数使用说明
    • gameObject 参数提供对关联游戏对象的访问
    • 如需获取 AnimGraphManager 组件,可通过 gameObject.GetComponent<AnimGraphManager>() 获取
  3. 环境限制
    • 此套命名规范专为 AnimationGraph 组件设计
    • 传统 Animator 仍需使用之前的函数命名方式

StateMachine 节点

通过状态机响应输入,实现基于参数的状态切换:

状态机节点
状态机节点

操作指南

1. 重命名:双击节点(间隔一定时间)可编辑名称

重命名状态机

2. 编辑状态机:双击进入子图编辑界面

进入状态机编辑

Constraints 节点

骨骼约束节点用于在动画流中,将目标骨骼(被约束骨骼)的 Position、Rotation 或 Scale 与源骨骼保持一致。通过该节点,可以实现被约束骨骼随源骨骼的变换而动态更新。

Constraints Node
Constraints Node

⚠️ 注意:目标骨骼与源骨骼必须统一绑定在同一个 Avatar 中

可选约束类型

可添加约束类型共有以下六种,每种约束均可重复添加

约束类型 说明
PositionConstraint 约束骨骼的Position,相对于一个或多个源骨骼混合的Position
RotationConstraint 约束骨骼的Rotation,相对于一个或多个源骨骼混合的Rotation
ScaleConstraint 约束骨骼的Scale,相对于一个或多个源骨骼混合的Scale
AimConstraint 约束骨骼的Rotation,使其朝向一个或多个源骨骼混合的Position
LookAtConstraint 约束骨骼的Rotation,使其朝向一个或多个源骨骼混合的Position,简化的AimConstraint
ParentConstraint 约束骨骼的Position和Rotation,使其表现为源骨骼的子对象
  • 上述约束类型与同名组件功能保持一致,部分内容可参考对应的组件

属性面板

Constraints Node Inspector

参数列表

节点提供以下两类参数:

节点参数

参数 说明
Bone To Constrain 需要被约束的骨骼,可选择场景中存在的骨骼,所选骨骼必须绑定于Avatar中
Node Weight 节点约束的Pose与输入Pose之间混合的权重
Position Axis 节点约束的Position轴, 仅在包含PositionConstraint或ParentConstraint时显示
Rotation Axis 节点约束的Rotation轴,仅在包含RotationConstraint、LookAtConstraint、AimConstraint或ParentConstraint时显示
Scale Axis 节点约束的Scale轴,仅在包含ScaleConstraint时显示
Constraints 节点应用的约束,选中某一约束后在面板下方显示该约束的设置参数
Constraint Name 约束的名字
Constraint Type 约束的类型
Constraint Weight 约束的权重,约束Transform相同分量的Constraints会权重归一化,如RotationConstraint、LookAtConstraint和AimConstraint都存在时,它们的权重会统一归一化;当约束Transform相同分量的Constraints的权重和小于1时,保持原始权重值

约束参数

参数 持有该参数的约束 说明
Maintain Offset All 是否使该约束保持默认Pose下的偏移
Constraint Axis 除 LookAtConstraint 该约束可影响的轴
Sources All 源骨骼及其权重,同一约束的所有源骨骼的权重会归一化
Use World Up Object LookAtConstraint 决定World Up Vecotr该如何计算。当设置为 true 时,约束使用 World Up Object 来计算 World Up Vecotr。当设置为 false 时,约束使用世界 Y 轴作为 WorldUpVecotr
Roll LookAtConstraint 旋转世界 Y 轴 Roll 度作为 Up Vector
World Up Object LookAtConstraint 和 AimConstraint 计算 WorldUpVecotr
Aim Vector AimConstraint 受约束对象朝向的轴
Up Vector AimConstraint Up Vector 控制约束对象绕 Aim Vector的旋转。它定义在约束对象的局部空间中
World Up Type AimConstraint 决定 World Up Vector 的计算方式,参考AimConstraint.WorldUpType
World Up Vector AimConstraint 当 World Up Type 为 AimConstraint.WorldUpType.Vector 或 AimConstraint.WorldUpType.ObjectRotationUp 时使用的 World Up Vecotr

特性

  • 可端口化:除约束类型约束名字,其余参数均可端口化

  • 在属性上点击右键弹出 Show As Port 菜单,点击即可端口化,再次点击可取消端口化

Show As Port

  • 端口化的参数将由图逻辑控制,无法在 Inspector 中手动修改

注意事项

  • 单个约束效果等同于同名组件的效果;多个约束会混合叠加,产生综合效果
  • 多个影响 Rotation 约束的叠加效果会受到添加顺序影响
  • 当约束中包含ParentConstraint时,其他类型的约束均会失效,只应用ParentConstraint的约束效果
  • 如果运行时更改了被约束骨骼,而之前的骨骼未被输入动画控制,则该骨骼会被重置为 Avatar 中的默认姿势
节点功能与分类
CodeBase 节点介绍