CustomStateControllerEditor.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using System.Collections.Generic;
  2. using Fort23.UTool;
  3. using UnityEditor;
  4. using UnityEngine;
  5. using Utility;
  6. namespace Mono.UI.UIComs
  7. {
  8. [CustomEditor(typeof(CustomStateController))]
  9. public class CustomStateControllerEditor : UnityEditor.Editor
  10. {
  11. private CustomStateController uIStateController;
  12. private void OnEnable()
  13. {
  14. uIStateController = (CustomStateController)target;
  15. }
  16. public int SelectIndex
  17. {
  18. get { return _selectIndex; }
  19. set
  20. {
  21. if (value != _selectIndex && value >= 0)
  22. {
  23. _selectIndex = value;
  24. uIStateController.CurrIndex = _selectIndex;
  25. uIStateController.ChangeState(_selectIndex);
  26. Debug.Log("切换状态+" + uIStateController.data[_selectIndex].StateInfos[0].UIStateV4Datas.Count);
  27. }
  28. }
  29. }
  30. private int _selectIndex;
  31. private Object ObjectPrefab;
  32. bool isInited = false;
  33. public override void OnInspectorGUI()
  34. {
  35. SerializedProperty AllComsProperty = serializedObject.FindProperty("AllComs");
  36. SerializedProperty AllComsStateTypesProperty = serializedObject.FindProperty("AllComsStateTypes");
  37. if (uIStateController.AllComsStateTypes.Count < uIStateController.AllComs.Count)
  38. {
  39. uIStateController.AllComsStateTypes.Add(CustomStateController.UIStateType.Null);
  40. }
  41. GUILayout.BeginHorizontal(GUI.skin.box);
  42. _selectIndex = uIStateController.CurrIndex;
  43. for (var i = 0; i < uIStateController.data.Count; i++)
  44. {
  45. if (GUILayout.Toggle(SelectIndex == i, i.ToString()))
  46. {
  47. SelectIndex = i;
  48. }
  49. }
  50. EditorGUILayout.EndHorizontal();
  51. EditorGUILayout.ObjectField(ObjectPrefab, typeof(Object), false);
  52. SerializedProperty property;
  53. EditorGUILayout.LabelField("需要保存状态数据的组件列表:");
  54. var delList = new List<int>();
  55. for (var i = 0; i < uIStateController.AllComs.Count; i++)
  56. {
  57. GUILayout.BeginHorizontal();
  58. property = AllComsProperty.GetArrayElementAtIndex(i);
  59. property.objectReferenceValue = EditorGUILayout.ObjectField(property.objectReferenceValue, typeof(Object), true);
  60. uIStateController.AllComsStateTypes[i] = (CustomStateController.UIStateType)EditorGUILayout.EnumFlagsField(uIStateController.AllComsStateTypes[i]);
  61. if (GUILayout.Button("X"))
  62. {
  63. //将元素添加进删除list
  64. delList.Add(i);
  65. }
  66. GUILayout.EndHorizontal();
  67. }
  68. //遍历删除list,将其删除掉
  69. foreach (var i in delList)
  70. {
  71. AllComsProperty.DeleteArrayElementAtIndex(i);
  72. AllComsStateTypesProperty.DeleteArrayElementAtIndex(i);
  73. }
  74. // EditorGUILayout.LabelField("当前保存的状态数据列表:");
  75. // for (var i = 0; i < uIStateController.data.Count; i++)
  76. // {
  77. // property = AllComDatasProperty.GetArrayElementAtIndex(i);
  78. // EditorGUILayout.PropertyField(property);
  79. // }
  80. EditorGUILayout.BeginHorizontal();
  81. if (GUILayout.Button("添加当前状态数据"))
  82. {
  83. uIStateController.AddData();
  84. SelectIndex = uIStateController.data.Count - 1;
  85. Debug.Log("添加当前状态数据");
  86. EditorUtility.SetDirty(uIStateController.gameObject);
  87. }
  88. if (GUILayout.Button("保存当前状态数据"))
  89. {
  90. uIStateController.SaveData();
  91. EditorUtility.SetDirty(uIStateController.gameObject);
  92. Debug.Log("保存当前状态数据");
  93. }
  94. if (GUILayout.Button("删除当前状态数据"))
  95. {
  96. uIStateController.RemoveData(SelectIndex);
  97. SelectIndex = uIStateController.data.Count - 1;
  98. EditorUtility.SetDirty(uIStateController.gameObject);
  99. Debug.Log("删除当前状态数据");
  100. }
  101. EditorGUILayout.EndHorizontal();
  102. var eventType = Event.current.type;
  103. //在Inspector 窗口上创建区域,向区域拖拽资源对象,获取到拖拽到区域的对象
  104. if (eventType == EventType.DragUpdated || eventType == EventType.DragPerform)
  105. {
  106. DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
  107. if (eventType == EventType.DragPerform)
  108. {
  109. DragAndDrop.AcceptDrag();
  110. foreach (var o in DragAndDrop.objectReferences)
  111. {
  112. AddObject(AllComsProperty, o);
  113. }
  114. }
  115. Event.current.Use();
  116. }
  117. serializedObject.ApplyModifiedProperties();
  118. serializedObject.UpdateIfRequiredOrScript();
  119. }
  120. private void AddObject(SerializedProperty dataProperty, Object obj)
  121. {
  122. int index = dataProperty.arraySize;
  123. dataProperty.InsertArrayElementAtIndex(index);
  124. var element = dataProperty.GetArrayElementAtIndex(index);
  125. element.objectReferenceValue = obj;
  126. }
  127. private void AddStateData(CustomStateController.UIStateData data)
  128. {
  129. uIStateController.data.Add(data);
  130. }
  131. }
  132. }