using UnityEditor; using UnityEngine; using VketCloudGUITools.Runtime; using UnityEditorInternal; using UnityEngine.UI; namespace VketCloudGUITools.Editor { [CustomEditor(typeof(VCLayerList))] public class VCLayerListInspector : UnityEditor.Editor { private ReorderableList _reorderableList; private bool showAdvancedOptions = false; public void OnEnable() { } public override void OnInspectorGUI() { serializedObject.Update(); DrawProperties(); serializedObject.ApplyModifiedProperties(); } //各要素の描画 void DrawProperties() { DrawDefaultInspector(); showAdvancedOptions = EditorGUILayout.Foldout(showAdvancedOptions, "Advanced Options"); if (showAdvancedOptions) { if (_reorderableList == null) { var componentsProperty = serializedObject.FindProperty("_components"); _reorderableList = new ReorderableList(serializedObject, componentsProperty, true, true, true, true); _reorderableList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { var element = _reorderableList.serializedProperty.GetArrayElementAtIndex(index); rect.y += 2; EditorGUI.BeginChangeCheck(); var text = EditorGUI.TextField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element.stringValue); if (EditorGUI.EndChangeCheck()) { element.stringValue = text; } }; _reorderableList.drawHeaderCallback = rect => { EditorGUI.LabelField(rect, "Components"); }; } _reorderableList.DoLayoutList(); var layerList = target as VCLayerList; layerList.MaskFoldout = EditorGUILayout.Foldout(layerList.MaskFoldout, "Mask"); if (layerList.MaskFoldout) { if (layerList.Mask.HasValue) { EditorGUI.BeginChangeCheck(); var URI = (Sprite)EditorGUILayout.ObjectField("Click Area Image", layerList.Mask.URI, typeof(Sprite), true); var Show = EditorGUILayout.Toggle("Show", layerList.Mask.Show); var Pos = EditorGUILayout.Vector2Field("Pos", layerList.Mask.Pos); var Size = EditorGUILayout.Vector2Field("Size", layerList.Mask.Size); var Z = EditorGUILayout.IntField("Z", layerList.Mask.Z); var Pivot = EditorGUILayout.Vector2Field("Pivot", layerList.Mask.Pivot); var Anchor = (AnchorType)EditorGUILayout.EnumPopup("Anchor", layerList.Mask.Anchor); var Color = EditorGUILayout.ColorField("Color", layerList.Mask.Color); var Vertical = EditorGUILayout.Toggle("Vertical", layerList.Mask.Vertical); var FreeSlide = EditorGUILayout.Toggle("Free Slide", layerList.Mask.FreeSlide); var WheelTravel = EditorGUILayout.FloatField("Wheel Travel", layerList.Mask.WheelTravel); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(layerList, "Layer"); layerList.Mask.URI = URI; layerList.Mask.Show = Show; layerList.Mask.Pos = Pos; layerList.Mask.Size = Size; layerList.Mask.Z = Z; layerList.Mask.Pivot = Pivot; layerList.Mask.Anchor = Anchor; layerList.Mask.Color = Color; layerList.Mask.Vertical = Vertical; layerList.Mask.FreeSlide = FreeSlide; layerList.Mask.WheelTravel = WheelTravel; } EditorGUILayout.LabelField("Seek Bar"); EditorGUILayout.BeginVertical(GUI.skin.box); if (layerList.Mask.SeekBar.HasVerticalValue) { DrawSeekBarItem(layerList, true); if (GUILayout.Button("Delete Vertical Seek Bar")) { Undo.RecordObject(layerList, "Layer"); layerList.Mask.SeekBar.SetVertical(null); Repaint(); } } else { if (GUILayout.Button("Add Vertical Seek Bar")) { Undo.RecordObject(layerList, "Layer"); var item = new VCLayerMaskSeekBarItem(); layerList.Mask.SeekBar.SetVertical(item); Repaint(); } } if (layerList.Mask.SeekBar.HasHorizontalValue) { DrawSeekBarItem(layerList, false); if (GUILayout.Button("Delete Horizontal Seek Bar")) { Undo.RecordObject(layerList, "Layer"); layerList.Mask.SeekBar.SetHorizontal(null); Repaint(); } } else { if (GUILayout.Button("Add Horizontal Seek Bar")) { Undo.RecordObject(layerList, "Layer"); var item = new VCLayerMaskSeekBarItem(); layerList.Mask.SeekBar.SetHorizontal(item); Repaint(); } } EditorGUILayout.EndVertical(); if (GUILayout.Button("Delete Mask")) { Undo.RecordObject(layerList, "Layer"); layerList.Mask.Initialize(false); Repaint(); } } else { if (GUILayout.Button("Add Mask")) { Undo.RecordObject(layerList, "Layer"); layerList.Mask.Initialize(true); Repaint(); } } } } } void DrawSeekBarItem(VCLayerList layerList, bool isVertical) { var item = isVertical ? layerList.Mask.SeekBar.Vertical : layerList.Mask.SeekBar.Horizontal; EditorGUILayout.LabelField(isVertical ? "Vertical" : "Horizontal"); EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUI.BeginChangeCheck(); var Base = (Sprite)EditorGUILayout.ObjectField("Base Image", item.Base, typeof(Sprite), true); var Front = (Sprite)EditorGUILayout.ObjectField("Front Image", item.Front, typeof(Sprite), true); var On = (Sprite)EditorGUILayout.ObjectField("On Image", item.On, typeof(Sprite), true); var Off = (Sprite)EditorGUILayout.ObjectField("Off Image", item.Off, typeof(Sprite), true); var BarWidth = EditorGUILayout.IntField("Bar Width", item.BarWidth); var OnSize = EditorGUILayout.Vector2IntField("On Size", item.OnSize); var OffSize = EditorGUILayout.Vector2IntField("Off Size", item.OffSize); if (EditorGUI.EndChangeCheck()) { item.Base = Base; item.Front = Front; item.On = On; item.Off = Off; item.BarWidth = BarWidth; item.OnSize = OnSize; item.OffSize = OffSize; } EditorGUILayout.EndVertical(); } } }