public override void OnInspectorGUI() { //base.OnInspectorGUI(); master.CheckComponents(); serializedObject.Update(); T23_EditorUtility.ShowTitle("Master"); GUILayout.Box("Group #" + master.groupID.ToString(), T23_EditorUtility.HeadlineStyle(true)); GUILayout.Space(10); SerializedProperty broadcastProp = serializedObject.FindProperty("broadcastTitles"); if (broadcastReorderableList == null) { broadcastReorderableList = new ReorderableList(serializedObject, broadcastProp); broadcastReorderableList.draggable = true; broadcastReorderableList.drawHeaderCallback = rect => EditorGUI.LabelField(rect, "Broadcast"); broadcastReorderableList.drawElementCallback = (rect, index, isActive, isFocused) => { rect.height = EditorGUIUtility.singleLineHeight; EditorGUI.LabelField(rect, master.broadcastTitles[index]); }; broadcastReorderableList.onAddDropdownCallback = (Rect buttonRect, ReorderableList list) => { var menu = new GenericMenu(); var assetList = T23_EditorUtility.GetProgramAssets("Broadcast"); foreach (var pair in assetList) { menu.AddItem(new GUIContent(pair.Key), false, () => { master.SetBroadcast(pair.Value); }); } menu.DropDown(buttonRect); }; broadcastReorderableList.onChangedCallback = ChangeBroadcast; } broadcastReorderableList.DoLayoutList(); /* * EditorGUILayout.BeginHorizontal(); * setBroadcast = (UdonSharpProgramAsset)EditorGUILayout.ObjectField("New Broadcast", setBroadcast, typeof(UdonSharpProgramAsset), false); * if (GUILayout.Button("Set")) * { * EditorApplication.delayCall += () => SetBroadcast(); * } * EditorGUILayout.EndHorizontal(); */ GUILayout.Space(10); SerializedProperty triggerProp = serializedObject.FindProperty("triggerTitles"); if (triggerReorderableList == null) { triggerReorderableList = new ReorderableList(serializedObject, triggerProp); triggerReorderableList.draggable = true; triggerReorderableList.drawHeaderCallback = rect => EditorGUI.LabelField(rect, "Trigger"); triggerReorderableList.drawElementCallback = (rect, index, isActive, isFocused) => { rect.height = EditorGUIUtility.singleLineHeight; EditorGUI.LabelField(rect, master.triggerTitles[index]); }; triggerReorderableList.onAddDropdownCallback = (Rect buttonRect, ReorderableList list) => { var menu = new GenericMenu(); var assetList = T23_EditorUtility.GetProgramAssets("Trigger"); foreach (var pair in assetList) { menu.AddItem(new GUIContent(pair.Key), false, () => { master.AddTrigger(pair.Value); }); } menu.DropDown(buttonRect); }; triggerReorderableList.onChangedCallback = ChangeTrigger; } triggerReorderableList.DoLayoutList(); /* * EditorGUILayout.BeginHorizontal(); * addTrigger = (UdonSharpProgramAsset)EditorGUILayout.ObjectField("New Trigger", addTrigger, typeof(UdonSharpProgramAsset), false); * if (GUILayout.Button("Add")) * { * AddTrigger(); * } * EditorGUILayout.EndHorizontal(); */ GUILayout.Space(10); SerializedProperty actionProp = serializedObject.FindProperty("actionTitles"); if (actionReorderableList == null) { actionReorderableList = new ReorderableList(serializedObject, actionProp); actionReorderableList.draggable = true; actionReorderableList.drawHeaderCallback = rect => EditorGUI.LabelField(rect, "Action"); actionReorderableList.drawElementCallback = (rect, index, isActive, isFocused) => { rect.height = EditorGUIUtility.singleLineHeight; EditorGUI.LabelField(rect, master.actionTitles[index]); }; actionReorderableList.onAddDropdownCallback = (Rect buttonRect, ReorderableList list) => { var menu = new GenericMenu(); var assetList = T23_EditorUtility.GetProgramAssets("Action"); foreach (var pair in assetList) { menu.AddItem(new GUIContent(pair.Key), false, () => { master.AddAction(pair.Value); }); } menu.DropDown(buttonRect); }; actionReorderableList.onChangedCallback = ChangeAction; } actionReorderableList.DoLayoutList(); /* * EditorGUILayout.BeginHorizontal(); * addAction = (UdonSharpProgramAsset)EditorGUILayout.ObjectField("New Action", addAction, typeof(UdonSharpProgramAsset), false); * if (GUILayout.Button("Add")) * { * AddAction(); * } * EditorGUILayout.EndHorizontal(); */ GUILayout.Space(10); EditorGUI.BeginChangeCheck(); EditorGUI.BeginDisabledGroup(master.hasObjectSync); serializedObject.FindProperty("reliable").boolValue = EditorGUILayout.Toggle("SyncMethod Manual", master.reliable); EditorGUI.EndDisabledGroup(); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); master.OrderComponents(); serializedObject.Update(); } if (master.hasObjectSync) { EditorGUILayout.HelpBox("VRC_ObjectSync が存在するため、Synchronize Method は Continuous に設定されています。", MessageType.Info); } if (master.shouldMoveComponents) { Object prefab = PrefabUtility.GetCorrespondingObjectFromSource(master.gameObject); string msg = ""; if (prefab == null) { if (master.MoveComponents()) { master.shouldMoveComponents = false; } else { msg = "コンポーネントが正しく整列できません。"; } } else { msg = "コンポーネントがPrefab内にある場合、整列できません。"; } if (msg != "") { EditorGUILayout.BeginHorizontal(); EditorGUILayout.HelpBox(msg, MessageType.Warning); if (GUILayout.Button("Clear")) { master.shouldMoveComponents = false; } EditorGUILayout.EndHorizontal(); } } serializedObject.ApplyModifiedProperties(); }