Version: 1.8
语言 : 中文
LayerMixer (BlendMask) 节点
StateMachine 节点

Controller 节点

用于兼容 AnimatorController Asset:

Controller 节点
Controller 节点

创建方式

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

参数同步

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

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

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

淡入淡出

Controller 节点提供了 CrossFade 与 CrossFadeInFixedTime 两个函数,是对 AnimatorControllerPlayable 下同名函数 的封装,用于实现节点内从当前状态到任何其他状态的淡入淡出。

以下为一个使用例子:

public class ShootController : MonoBehaviour
{
    AnimGraphManager animGraphManager;
    AnimationControllerNode controllerNode;
    public float normalizedDuration = 0.1f;
    public float duration = 0.25f;

    void Start()
    {
        animGraphManager = GetComponent<AnimGraphManager>();
        if (animGraphManager == null) return;

        RootAsset rootAsset = animGraphManager.rootAsset;
        if (rootAsset == null) return;

        AnimGraph.AnimGraph animGraph = rootAsset.rootAnimGraph;
        controllerNode = animGraph.nodes.OfType<AnimationControllerNode>().FirstOrDefault();
    }

    void Update()
    {
        if (Input.GetKeyDown("s"))
        {
            controllerNode?.CrossFade(animGraphManager, "Shoot", normalizedDuration);
        }
    }
}

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 仍需使用之前的函数命名方式
LayerMixer (BlendMask) 节点
StateMachine 节点