AnimatorController

class in UnityEditor.Animations

切换到手册

描述

动画控制器 (Animator Controller) 通过具有状态机(由参数控制)的层来控制动画。

using UnityEngine;
using UnityEditor;
using UnityEditor.Animations;
using System.Collections;

// Create a menu item that causes a new controller and statemachine to be created.

public class SM : MonoBehaviour { [MenuItem("MyMenu/Create Controller")] static void CreateController() { // Creates the controller var controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath("Assets/Mecanim/StateMachineTransitions.controller");

// Add parameters controller.AddParameter("TransitionNow", AnimatorControllerParameterType.Trigger); controller.AddParameter("Reset", AnimatorControllerParameterType.Trigger); controller.AddParameter("GotoB1", AnimatorControllerParameterType.Trigger); controller.AddParameter("GotoC", AnimatorControllerParameterType.Trigger);

// Add StateMachines var rootStateMachine = controller.layers[0].stateMachine; var stateMachineA = rootStateMachine.AddStateMachine("smA"); var stateMachineB = rootStateMachine.AddStateMachine("smB"); var stateMachineC = stateMachineB.AddStateMachine("smC");

// Add States var stateA1 = stateMachineA.AddState("stateA1"); var stateB1 = stateMachineB.AddState("stateB1"); var stateB2 = stateMachineB.AddState("stateB2"); stateMachineC.AddState("stateC1"); var stateC2 = stateMachineC.AddState("stateC2"); // don’t add an entry transition, should entry to state by default

// Add Transitions var exitTransition = stateA1.AddExitTransition(); exitTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TransitionNow"); exitTransition.duration = 0;

var resetTransition = rootStateMachine.AddAnyStateTransition(stateA1); resetTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "Reset"); resetTransition.duration = 0;

var transitionB1 = stateMachineB.AddEntryTransition(stateB1); transitionB1.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "GotoB1"); stateMachineB.AddEntryTransition(stateB2); stateMachineC.defaultState = stateC2; var exitTransitionC2 = stateC2.AddExitTransition(); exitTransitionC2.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "TransitionNow"); exitTransitionC2.duration = 0;

var stateMachineTransition = rootStateMachine.AddStateMachineTransition(stateMachineA, stateMachineC); stateMachineTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, "GotoC"); rootStateMachine.AddStateMachineTransition(stateMachineA, stateMachineB); } }

变量

layers控制器中的层。
parameters用于在脚本和控制器之间通信的参数。例如,它们用于驱动过渡和混合树。

构造函数

AnimatorController构造函数。

公共函数

AddEffectiveStateMachineBehaviour为层 layerIndex 向 AnimatorState 添加 stateMachineBehaviourType 类型的状态机行为类。在处理同步层并且要在同步层添加状态机行为时应使用此函数。C# 用户可以使用通用版本。
AddLayerUtility 函数,用于向控制器添加一个层。
AddMotionUtility 函数,用其中的运动创建一个新状态。
AddParameterUtility 函数,用于向控制器添加一个参数。
CreateBlendTreeInController在新 AnimatorState 中创建一个 BlendTree。
GetBehaviours返回所有与类型 T 匹配或派生自 T 的 StateMachineBehaviour。
GetStateEffectiveBehaviours获取 AnimatorState 的有效状态机行为列表。行为或者存储在 AnimatorStateMachine 中,或者存储在 AnimatorLayer 的重载中。使用此函数可获取有效使用的 Behaviour 列表。
GetStateEffectiveMotion获取 AnimatorState 的有效 Motion。Motion 或者存储在 AnimatorStateMachine 中,或者存储在 AnimatorLayer 的重载中。使用此函数可获取有效使用的 Motion。
MakeUniqueLayerName为层创建唯一名称。
MakeUniqueParameterName为参数创建唯一名称。
RemoveLayerUtility 函数,用于从控制器删除一个层。
RemoveParameterUtility 函数,用于从控制器删除一个参数。
SetStateEffectiveBehaviours为 AnimatorState 设置有效的状态机 Behaviour 列表。Behaviour 列表或者存储在 AnimatorStateMachine 中,或者存储在 AnimatorLayer 的重载中。使用此函数可设置有效使用的 Behaviour 列表。
SetStateEffectiveMotion设置 AnimatorState 的有效 Motion。Motion 或者存储在 AnimatorStateMachine 中,或者存储在 AnimatorLayer 的重载中。使用此函数可设置有效使用的 Motion。

静态函数

CreateAnimatorControllerAtPath在给定路径处创建一个 AnimatorController。
CreateAnimatorControllerAtPathWithClip在给定路径处创建一个 AnimatorController,并自动创建一个带有 AnimatorStateMachine 的 AnimatorLayer,该状态机使用其中的 AnimationClip 添加一个 State。
CreateStateMachineBehaviour此函数将根据此脚本中的类定义创建一个 StateMachineBehaviour 实例。
FindStateMachineBehaviourContext使用此函数可检索行为的所有者。