动画节点仅在 AnimGraph 中使用,输出为姿势(Pose),连接至 Output 节点可将姿势应用于角色。AnimGraph 主要包含 Clip、Blend、BlendMask、Controller、StateMachine、RigGraph、IK、Retarget 等节点类型。本节介绍除 RigGraph、IK 和 Retarget 之外的动画节点。
对应 AnimationClip 资产,用于播放单一动画片段。
节点样式:
功能特性:
属性面板:
通过 Inspector 可配置动画片段及其他参数,包含预览功能:
混合两个输入姿势(Pose),通过 Alpha 值(0–1)控制混合权重:
混合多个输入姿势,每个姿势可独立设置权重:
操作方式:
基于参数动态混合多个子运动:
属性面板:
通过 Inspector 设置混合类型、参数和运动列表:
混合类型:
1. Simple 1D:单参数混合

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

BlendTree 管理:
在 Base 端口连接的动画的基础上,以 additive 模式叠加 Additive 端口连接的动画,Alpha 端口设置叠加权重。
Additive 端口连接的动画需要在动画的Import Settings -> Animation -> Additive Type 中设置 additive 类型:
在 BlendMulti 基础上增加骨骼遮罩(AvatarMask)和混合模式选项:
核心特性:
操作方式:


属性配置:
通过 Inspector 设置骨骼遮罩和混合模式:
混合模式:
以下是一个较为完整的BlendMask功能,基本动作(Pose 0)是一个状态机,里面的motion是全身动作,而Pose1和Pose2是上半身的动作,和攻击动作
用于兼容 AnimatorController Asset:
创建方式:
参数同步: Inspector 中可将 Controller 参数同步到 AnimGraph:
⚠️ 同名但类型不同的参数会触发警告
在 AnimationGraph 环境下使用 StateMachineBehavior 时,所有状态回调函数需要遵循特殊命名规则:
| 标准函数名 | AnimationGraph 专用函数名 |
|---|---|
OnStateEnter |
OnAGStateEnter |
OnStateExit |
OnAGStateExit |
OnStateUpdate |
OnAGStateUpdate |
OnStateMove |
OnAGStateMove |
OnStateIK |
OnAGStateIK |
OnStateMove |
OnAGStateMove |
OnStateMachineEnter |
OnAGStateMachineEnter |
OnStateMachineExit |
OnAGStateMachineExit |
函数签名需要做以下调整:
首个参数类型变更:
原类型:Animator
新类型:GameObject
其他参数保持不变
// 标准实现
override public void OnStateExit(Animator animator,
AnimatorStateInfo stateInfo,
int layerIndex)
{
// 实现代码
}
// AnimationGraph 专用实现
override public void OnAGStateExit(GameObject gameObject,
AnimatorStateInfo stateInfo,
int layerIndex)
{
// 实现代码
}
AG 前缀(如 OnAGStateEnter)gameObject 参数提供对关联游戏对象的访问gameObject.GetComponent<AnimGraphManager>() 获取通过状态机响应输入,实现基于参数的状态切换:
操作指南:
1. 重命名:双击节点(间隔一定时间)可编辑名称

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

骨骼约束节点用于在动画流中,将目标骨骼(被约束骨骼)的 Position、Rotation 或 Scale 与源骨骼保持一致。通过该节点,可以实现被约束骨骼随源骨骼的变换而动态更新。
⚠️ 注意:目标骨骼与源骨骼必须统一绑定在同一个 Avatar 中
可添加约束类型共有以下六种,每种约束均可重复添加
| 约束类型 | 说明 |
|---|---|
| PositionConstraint | 约束骨骼的Position,相对于一个或多个源骨骼混合的Position |
| RotationConstraint | 约束骨骼的Rotation,相对于一个或多个源骨骼混合的Rotation |
| ScaleConstraint | 约束骨骼的Scale,相对于一个或多个源骨骼混合的Scale |
| AimConstraint | 约束骨骼的Rotation,使其朝向一个或多个源骨骼混合的Position |
| LookAtConstraint | 约束骨骼的Rotation,使其朝向一个或多个源骨骼混合的Position,简化的AimConstraint |
| ParentConstraint | 约束骨骼的Position和Rotation,使其表现为源骨骼的子对象 |

节点提供以下两类参数:
| 参数 | 说明 |
|---|---|
| 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 菜单,点击即可端口化,再次点击可取消端口化
