Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

AnimatorController.FindStateMachineBehaviourContext

Объявление

public static StateMachineBehaviourContext[] FindStateMachineBehaviourContext(StateMachineBehaviour behaviour);

Параметры

behaviour Поведение конечного автомата, для которого нужно получить контекст.

Возвращает

StateMachineBehaviourContext[] Возвращает контекст редакции State Machine Behavior.

Описание

Используйте эту функцию, чтобы получить владельца этого поведения.

Обратите внимание, что эта функция работает очень медленно. Не рекомендуется использовать эту функцию каждый кадр.

Смотрите так же: StateMachineBehaviourContext.

using UnityEngine; using UnityEditor; public class IdleBehaviour : StateMachineBehaviour { public int transitionCount; protected int randomTransitionId = Animator.StringToHash("random"); // OnStateEnter is called when a transition starts and the state machine starts to evaluate the state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { } // OnStateUpdate is called at each engine tick between OnStateEnter and OnStateExit callback override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (stateInfo.normalizedTime > 0.5f) animator.SetInteger(randomTransitionId, Random.Range(0, transitionCount)); } // OnStateExit is called when a transition ends and the state machine ends to evaluate the state override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { } } [CustomEditor(typeof(IdleBehaviour), true)] public class IdleBehaviourEditor : Editor { UnityEditor.Animations.StateMachineBehaviourContext[] context; SerializedProperty transitionCount; public void OnEnable() { context = UnityEditor.Animations.AnimatorController.FindStateMachineBehaviourContext(target as StateMachineBehaviour); if (context != null) { // animatorObject can be an AnimatorState or AnimatorStateMachine UnityEditor.Animations.AnimatorState state = context[0].animatorObject as UnityEditor.Animations.AnimatorState; if (state != null) { IdleBehaviour behaviour = target as IdleBehaviour; behaviour.transitionCount = state.transitions.Length; } } transitionCount = serializedObject.FindProperty("transitionCount"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUI.BeginDisabledGroup(true); EditorGUILayout.PropertyField(transitionCount); EditorGUI.EndDisabledGroup(); serializedObject.ApplyModifiedProperties(); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3