用于兼容 AnimatorController Asset:
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 专用函数名 |
|---|---|
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>() 获取