using UnityEditor; using UnityEditorInternal; using UnityEngine; namespace uc { [CanEditMultipleObjects, CustomEditor(typeof(MoviePlayerCanvas), false)] public class MoviePlayerCanvasEditor : ActivityBaseEditor { SerializedProperty m_LoopProperty; GUIContent m_LoopLabel; SerializedProperty m_FilenamesProperty; ReorderableList m_FilenamesList; MoviePlayerCanvas canvas; protected override void OnEnable() { base.OnEnable(); canvas = target as MoviePlayerCanvas; m_LoopProperty = serializedObject.FindProperty("loop"); m_LoopLabel = new GUIContent("Loop", "loop movie"); m_FilenamesProperty = serializedObject.FindProperty("filenames"); m_FilenamesList = new ReorderableList(serializedObject, m_FilenamesProperty, true, true, true, true); m_FilenamesList.drawHeaderCallback = rect => { EditorGUI.LabelField(rect, "Movie Filenames"); }; m_FilenamesList.drawElementCallback = (rect, index, active, focused) => { #if true SerializedProperty prefab = m_FilenamesProperty.GetArrayElementAtIndex(index); DShowClip go = (DShowClip)prefab.objectReferenceValue; GUIContent label; if (go == null) { label = new GUIContent("Empty", "Drag a GameObject here"); } else { label = new GUIContent(go.name); } float shrink = 0.2f; rect.y += rect.height * shrink * 0.4f; rect.height *= (1.0f - shrink); var newGameObject = (DShowClip)EditorGUI.ObjectField(rect, label, go, typeof(DShowClip), true); if (newGameObject == null) { canvas.filenames[index] = null; EditorUtility.SetDirty(target); return; } if (canvas.filenames[index] != newGameObject) { canvas.filenames[index] = newGameObject; EditorUtility.SetDirty(target); } #else SerializedProperty prefab = m_FilenamesProperty.GetArrayElementAtIndex(index); string go = prefab.stringValue; float shrink = 0.2f; rect.y += rect.height * shrink * 0.4f; rect.height *= (1.0f - shrink); go = EditorGUI.TextField(rect, go); if (string.IsNullOrEmpty(go)) { canvas.filenames[index] = ""; EditorUtility.SetDirty(target); return; } if (canvas.filenames[index] != go) { canvas.filenames[index] = go; EditorUtility.SetDirty(target); } #endif }; } public override void OnInspectorGUI() { EditorGUILayout.Space(); serializedObject.Update(); EditorGUILayout.PropertyField(m_LoopProperty, m_LoopLabel); EditorGUILayout.Space(); m_FilenamesList.DoLayoutList(); serializedObject.ApplyModifiedProperties(); DrawEventInspectorGUI(); } } }