#if UNITY_EDITOR using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using Sirenix.Utilities.Editor; using ChivaXR; using ChivaXR.Op; public class VirtualSimulationManager12 : OdinMenuEditorWindow { public enum ManagerState { markContainer, animationManager, operationManager, processManagement, animationEditor, soundManager, videoManager, ToolsManager } [LabelText("Manager View")] [LabelWidth(100f)] [EnumToggleButtons] [ShowInInspector] [OnValueChanged("OnValueChange")] private ManagerState managerstate; private int enumIndex = 0; private bool treeRebuild = false; private DrawMarkContainer drawMarkContanier = new DrawMarkContainer(); private DrawProcessManagement drawProcess = new DrawProcessManagement(); private DrawAnimationManager drawAnimationManager = new DrawAnimationManager(); private DrawOperationManager drawOperationManager = new DrawOperationManager(); private DrawAnimationEditor drawAnimationEditor = new DrawAnimationEditor(); [MenuItem("ChivaTool/VirtualSimulationManager")] public static void OpenWindow() { GetWindow().Show(); } private void StateChanged() { treeRebuild = true; } protected override void Initialize() { drawMarkContanier.FindMyObject(); drawProcess.FindMyObject(); drawAnimationManager.FindMyObject(); drawOperationManager.FindMyObject(); drawAnimationEditor.FindMyObject(); } protected override void OnGUI() { if (treeRebuild && Event.current.type == EventType.Layout) { ForceMenuTreeRebuild(); treeRebuild = false; } SirenixEditorGUI.Title("VirtualSimulationManager", "仿真编辑控制器", TextAlignment.Center, true); EditorGUILayout.Space(); switch (managerstate) { case ManagerState.soundManager: case ManagerState.videoManager: case ManagerState.ToolsManager: DrawEditor(enumIndex); break; } EditorGUILayout.Space(); base.OnGUI(); } protected override void DrawEditors() { switch (managerstate) { case ManagerState.markContainer: case ManagerState.animationManager: case ManagerState.operationManager: case ManagerState.processManagement: case ManagerState.animationEditor: DrawEditor(enumIndex); break; } DrawEditor((int)managerstate); } protected override IEnumerable GetTargets() { List targets = new List(); targets.Add(drawMarkContanier); targets.Add(drawAnimationManager); targets.Add(drawOperationManager); targets.Add(drawProcess); targets.Add(drawAnimationEditor); targets.Add(null); targets.Add(null); targets.Add(null); targets.Add(base.GetTarget()); enumIndex = targets.Count - 1; return targets; } protected override void DrawMenu() { switch (managerstate) { case ManagerState.soundManager: case ManagerState.videoManager: case ManagerState.ToolsManager: base.DrawMenu(); break; } } protected override OdinMenuTree BuildMenuTree() { OdinMenuTree tree = new OdinMenuTree(); switch (managerstate) { case ManagerState.markContainer: break; case ManagerState.animationManager: break; case ManagerState.operationManager: break; case ManagerState.processManagement: break; case ManagerState.animationEditor: break; case ManagerState.soundManager: break; case ManagerState.videoManager: break; case ManagerState.ToolsManager: DrawToolManagerObject(tree); break; default: break; } return tree; } public void DrawToolManagerObject(OdinMenuTree tree) { ToolWindow stepWindow = new ToolWindow(); CreateWindow createWindow = new CreateWindow(); tree.Add("工具配置文件列表/肘型头配置表", stepWindow); tree.Add("添加工具配置表", createWindow); } private void OnValueChange() { //switch (managerstate) //{ // case ManagerState.soundManager: // case ManagerState.videoManager: // case ManagerState.ToolsManager: // DrawEditor(enumIndex); // break; //} base.ForceMenuTreeRebuild(); } } public class DrawMarkContainer : DrawSceneManagerObject { } public class DrawProcessManagement : DrawSceneManagerObject { } public class DrawAnimationManager : DrawSceneManagerObject { } public class DrawOperationManager : DrawSceneManagerObject { } public class DrawAnimationEditor : DrawSceneManagerObject { } public class ToolWindow { [TableList(ShowIndexLabels = true)] public List m_Tools; [Button("保存")] public void SaveAction() { } } public class CreateWindow { } public class DrawSceneManagerObject where T : MonoBehaviour { [ShowIf("@myObject!=null")] [InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)] public T myObject; public void FindMyObject() { if (myObject == null) { myObject = GameObject.FindObjectOfType(); } } [ShowIf("@myObject!=null")] [GUIColor(0.7f, 1, 0.7f)] [ButtonGroup("Top Button", -1000)] private void SelectSceneObject() { if (myObject != null) { Selection.activeGameObject = myObject.gameObject; } } [ShowIf("@myObject==null")] [Button] private void CreateManagerObject() { GameObject newManager = new GameObject(); newManager.name = "New" + typeof(T).ToString(); myObject = newManager.AddComponent(); GameObject managerGroup = GameObject.Find("Manager"); if (managerGroup == null) { managerGroup = new GameObject("Manager"); } newManager.transform.parent = managerGroup.transform; } } #endif