| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | using System.Collections.Generic;using Fort23.UTool;using UnityEditor;using UnityEngine;using Utility;namespace Mono.UI.UIComs{    [CustomEditor(typeof(CustomStateController))]    public class CustomStateControllerEditor : UnityEditor.Editor    {        private CustomStateController uIStateController;        private void OnEnable()        {            uIStateController = (CustomStateController)target;        }        public int SelectIndex        {            get { return _selectIndex; }            set            {                if (value != _selectIndex && value >= 0)                {                    _selectIndex = value;                    uIStateController.CurrIndex = _selectIndex;                    uIStateController.ChangeState(_selectIndex);                    Debug.Log("切换状态+" + uIStateController.data[_selectIndex].StateInfos[0].UIStateV4Datas.Count);                }            }        }        private int _selectIndex;        private Object ObjectPrefab;        bool isInited = false;        public override void OnInspectorGUI()        {            SerializedProperty AllComsProperty = serializedObject.FindProperty("AllComs");            SerializedProperty AllComsStateTypesProperty = serializedObject.FindProperty("AllComsStateTypes");            if (uIStateController.AllComsStateTypes.Count < uIStateController.AllComs.Count)            {                uIStateController.AllComsStateTypes.Add(CustomStateController.UIStateType.Null);            }            GUILayout.BeginHorizontal(GUI.skin.box);            _selectIndex = uIStateController.CurrIndex;            for (var i = 0; i < uIStateController.data.Count; i++)            {                if (GUILayout.Toggle(SelectIndex == i, i.ToString()))                {                    SelectIndex = i;                }            }            EditorGUILayout.EndHorizontal();            EditorGUILayout.ObjectField(ObjectPrefab, typeof(Object), false);            SerializedProperty property;            EditorGUILayout.LabelField("需要保存状态数据的组件列表:");            var delList = new List<int>();            for (var i = 0; i < uIStateController.AllComs.Count; i++)            {                GUILayout.BeginHorizontal();                property = AllComsProperty.GetArrayElementAtIndex(i);                property.objectReferenceValue = EditorGUILayout.ObjectField(property.objectReferenceValue, typeof(Object), true);                uIStateController.AllComsStateTypes[i] = (CustomStateController.UIStateType)EditorGUILayout.EnumFlagsField(uIStateController.AllComsStateTypes[i]);                if (GUILayout.Button("X"))                {                    //将元素添加进删除list                    delList.Add(i);                }                GUILayout.EndHorizontal();            }            //遍历删除list,将其删除掉            foreach (var i in delList)            {                AllComsProperty.DeleteArrayElementAtIndex(i);                AllComsStateTypesProperty.DeleteArrayElementAtIndex(i);            }            // EditorGUILayout.LabelField("当前保存的状态数据列表:");            // for (var i = 0; i < uIStateController.data.Count; i++)            // {            //     property = AllComDatasProperty.GetArrayElementAtIndex(i);            //     EditorGUILayout.PropertyField(property);            // }            EditorGUILayout.BeginHorizontal();            if (GUILayout.Button("添加当前状态数据"))            {                uIStateController.AddData();                SelectIndex = uIStateController.data.Count - 1;                Debug.Log("添加当前状态数据");                EditorUtility.SetDirty(uIStateController.gameObject);            }            if (GUILayout.Button("保存当前状态数据"))            {                uIStateController.SaveData();                EditorUtility.SetDirty(uIStateController.gameObject);                Debug.Log("保存当前状态数据");            }            if (GUILayout.Button("删除当前状态数据"))            {                uIStateController.RemoveData(SelectIndex);                SelectIndex = uIStateController.data.Count - 1;                EditorUtility.SetDirty(uIStateController.gameObject);                Debug.Log("删除当前状态数据");            }            EditorGUILayout.EndHorizontal();            var eventType = Event.current.type;            //在Inspector 窗口上创建区域,向区域拖拽资源对象,获取到拖拽到区域的对象            if (eventType == EventType.DragUpdated || eventType == EventType.DragPerform)            {                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;                if (eventType == EventType.DragPerform)                {                    DragAndDrop.AcceptDrag();                    foreach (var o in DragAndDrop.objectReferences)                    {                        AddObject(AllComsProperty, o);                    }                }                Event.current.Use();            }            serializedObject.ApplyModifiedProperties();            serializedObject.UpdateIfRequiredOrScript();        }        private void AddObject(SerializedProperty dataProperty, Object obj)        {            int index = dataProperty.arraySize;            dataProperty.InsertArrayElementAtIndex(index);            var element = dataProperty.GetArrayElementAtIndex(index);            element.objectReferenceValue = obj;        }        private void AddStateData(CustomStateController.UIStateData data)        {            uIStateController.data.Add(data);        }    }}
 |