在不使用 UnityEditor 的情况下,可以使用以下代码获取 AnimatorOverrideController 中的子状态机列表:

AnimatorOverrideController overrideController = GetComponent<AnimatorOverrideController>();
List<AnimatorStateMachine> stateMachines = new List<AnimatorStateMachine>();

foreach (AnimationClipPair clipPair in overrideController.clips)
{
    if (clipPair.overrideClip != null)
    {
        // 从覆盖剪辑获取状态机
        AnimatorStateMachine stateMachine = clipPair.overrideClip.GetStateMachine();
        
        // 如果状态机尚未添加到列表中,则将其添加到列表中
        if (!stateMachines.Contains(stateMachine))
        {
            stateMachines.Add(stateMachine);
        }
    }
}

// stateMachines 列表现在包含 `AnimatorOverrideController` 中的所有子状态机。

这个代码段首先获取 AnimatorOverrideController 组件,然后遍历所有的动画剪辑对。对于每个动画剪辑对,它会检查覆盖剪辑是否存在,并从中获取状态机。最后,它将所有状态机添加到一个列表中,这样就可以访问它们了。

Unity 获取 AnimatorOverrideController 子状态机列表 - 代码示例

原文地址: https://www.cveoy.top/t/topic/nm2Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录