• G#

AnimatorController.FindStateMachineBehaviourContext

Sarankan perubahan

Success!

Terima kasih untuk membantu kami meningkatkan kualitas Dokumentasi Unity. Meskipun kami tidak dapat menerima semua pengajuan, kami membaca setiap perubahan yang disarankan dari pengguna kami dan akan melakukan pembaruan di mana berlaku.

Close

Penjelasan gagal

Untuk beberapa alasan perubahan yang disarankan Anda tidak dapat diajukan. Silahkan <a>try lagi</a> dalam beberapa menit. Dan terima kasih untuk mengambil waktu untuk membantu kami meningkatkan kualitas Dokumentasi Unity.

Close

Cancel

Declaration

publik static StateMachineBehaviourContext[] FindStateMachineBehaviourContext( StateMachineBehaviour behaviour);

Parameters

behaviour Mesin State Behaviour untuk mendapatkan konteks.

Returns

Sitemap Mengembalikan konteks edisi Perilaku Mesin Negara.StateMachineBehaviourContext[] Returns the State Machine Behaviour edition context.

Description

Gunakan fungsi ini untuk mengambil pemilik perilaku ini.

Harap dicatat bahwa fungsi ini sangat lambat. Tidak disarankan untuk menggunakan fungsi ini setiap bingkai. Lihat Juga: 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(); } }