FPlayAnimEventInspector.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using UnityEngine;
  2. using UnityEditor;
  3. using Flux;
  4. namespace FluxEditor
  5. {
  6. [CustomEditor(typeof(FPlayAnimEvent))]
  7. public class FPlayAnimEventInspector : FEventInspector
  8. {
  9. private FPlayAnimEvent _animEvent;
  10. private SerializedProperty _animName = null;
  11. private SerializedProperty _animSpeed = null;
  12. private string[] animClipNames = null;
  13. private int animIdx = -1;
  14. protected override void OnEnable()
  15. {
  16. base.OnEnable();
  17. _animEvent = (FPlayAnimEvent)target;
  18. _animName = serializedObject.FindProperty("_animName");
  19. _animSpeed = serializedObject.FindProperty("_animSpeed");
  20. if (_animEvent.animator != null)
  21. {
  22. RuntimeAnimatorController ctrl = _animEvent.animator.runtimeAnimatorController;
  23. UnityEditor.Animations.AnimatorController ac = ctrl as UnityEditor.Animations.AnimatorController;
  24. animClipNames = new string[ac.layers[0].stateMachine.states.Length];
  25. for (int i = 0; i < animClipNames.Length; i++)
  26. {
  27. animClipNames[i] = ac.layers[0].stateMachine.states[i].state.name;
  28. }
  29. if (animClipNames != null)
  30. {
  31. for (int i = 0; i < animClipNames.Length; i++)
  32. {
  33. if (_animEvent.AnimName == animClipNames[i])
  34. {
  35. animIdx = i;
  36. break;
  37. }
  38. }
  39. }
  40. }
  41. }
  42. public override void OnInspectorGUI()
  43. {
  44. base.OnInspectorGUI();
  45. serializedObject.Update();
  46. if (animClipNames != null)
  47. {
  48. EditorGUILayout.BeginHorizontal();
  49. GUILayout.Label("引导动作", EditorStyles.label, GUILayout.Width(140));
  50. animIdx = EditorGUILayout.Popup(animIdx, animClipNames,GUILayout.Width(300));
  51. if (animIdx >= 0)
  52. {
  53. _animName.stringValue = animClipNames[animIdx];
  54. }
  55. EditorGUILayout.EndHorizontal();
  56. EditorGUILayout.BeginHorizontal();
  57. GUILayout.Label("动作播放速度", EditorStyles.label, GUILayout.Width(140));
  58. _animSpeed.intValue = EditorGUILayout.IntField("", _animSpeed.intValue, GUILayout.Width(300));
  59. EditorGUILayout.EndHorizontal();
  60. }
  61. serializedObject.ApplyModifiedProperties();
  62. }
  63. }
  64. }