using UnityEditor; using UnityEditorInternal; using UnityEngine; namespace uc { [CanEditMultipleObjects, CustomEditor(typeof(Activity), false)] public class ActivityEditor : ActivityBaseEditor { SerializedProperty m_IdleTimeProperty; GUIContent m_IdelTimeLabel; SerializedProperty m_CanvasActivitiesProperty; ReorderableList m_CanvasActivitiesList; Activity activity; protected override void OnEnable() { base.OnEnable(); activity = target as Activity; m_IdleTimeProperty = serializedObject.FindProperty("idleTime"); m_IdelTimeLabel = new GUIContent("Idle Time", "activity maximum idle time (only work in ActivityManager idle mode)"); m_CanvasActivitiesProperty = serializedObject.FindProperty("canvases"); m_CanvasActivitiesList = new ReorderableList(serializedObject, m_CanvasActivitiesProperty, true, true, true, true); m_CanvasActivitiesList.drawHeaderCallback = rect => { EditorGUI.LabelField(rect, "Owned Canvas Activities"); }; m_CanvasActivitiesList.drawElementCallback = (rect, index, active, focused) => { SerializedProperty prefab = m_CanvasActivitiesProperty.GetArrayElementAtIndex(index); CanvasActivity go = (CanvasActivity)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 newCanvas = (CanvasActivity)EditorGUI.ObjectField(rect, label, go, typeof(CanvasActivity), true); if (newCanvas == null) { activity.canvases[index] = null; EditorUtility.SetDirty(target); return; } if (activity.canvases[index] != newCanvas) { activity.canvases[index] = newCanvas; EditorUtility.SetDirty(target); } }; } public override void OnInspectorGUI() { EditorGUILayout.Space(); serializedObject.Update(); DrawActivityInspectorGUI(); DrawEventInspectorGUI(); serializedObject.ApplyModifiedProperties(); } public void DrawActivityInspectorGUI() { EditorGUILayout.PropertyField(m_IdleTimeProperty, m_IdelTimeLabel); EditorGUILayout.Space(); m_CanvasActivitiesList.DoLayoutList(); } } }