using UnityEditor; using UnityEngine; using UnityEngine.UI; using VketCloudGUITools.Runtime; using UnityEditorInternal; namespace VketCloudGUITools.Editor { [CanEditMultipleObjects] [CustomEditor(typeof(VCCanvas))] public class VCCanvasInspector : UnityEditor.Editor { private ReorderableList _reorderableList; public void OnEnable() { } public override void OnInspectorGUI() { serializedObject.Update(); DrawProperties(); } //各要素の描画 void DrawProperties() { EditorGUI.BeginChangeCheck(); //if (!CheckValues()) //{ // EditorGUILayout.HelpBox("CanvasScalerの値とVketCloudGUICanvasの値が異なるため、表示が崩れてしまう可能性があります。", MessageType.Warning); // if (GUILayout.Button("値のコピー : VketCloudGUICanvas -> CanvasScaler")) // { // OverwriteCanvasScalerValue(); // } //} DrawDefaultInspector(); if (_reorderableList == null) { var scriptsProperty = serializedObject.FindProperty("Scripts"); _reorderableList = new ReorderableList(serializedObject, scriptsProperty, true, true, true, true); _reorderableList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { var element = _reorderableList.serializedProperty.GetArrayElementAtIndex(index); rect.y += 2; var label = new GUIContent($"Element {index}"); EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, label); }; _reorderableList.drawHeaderCallback = rect => { EditorGUI.LabelField(rect, "HeliScript"); }; } _reorderableList.DoLayoutList(); serializedObject.ApplyModifiedProperties(); if (EditorGUI.EndChangeCheck()) { foreach (var v in targets) { Undo.RecordObject((v as Runtime.VCCanvas).GetComponent(), "Inspector"); var vketCloudGUICanvas = v as VCCanvas; vketCloudGUICanvas.ApplyValues(); } } } bool CheckValues() { foreach (var v in targets) { var vketCloudGUICanvas = v as VCCanvas; var canvasScaler = vketCloudGUICanvas.GetComponent(); if (vketCloudGUICanvas.CanvasType == Runtime.CanvasType.None && canvasScaler.uiScaleMode != CanvasScaler.ScaleMode.ConstantPixelSize) return false; if (vketCloudGUICanvas.CanvasType != Runtime.CanvasType.None && canvasScaler.uiScaleMode != CanvasScaler.ScaleMode.ScaleWithScreenSize) return false; if (vketCloudGUICanvas.CanvasType == Runtime.CanvasType.LandScape) { if (canvasScaler.referenceResolution != VCCanvas.CANVAS_SIZE_LANDSCAPE) return false; if (canvasScaler.matchWidthOrHeight != 0) return false; } else { if (canvasScaler.referenceResolution != VCCanvas.CANVAS_SIZE_PORTRAIT) return false; if (canvasScaler.matchWidthOrHeight != 1) return false; } } return true; } void OverwriteCanvasScalerValue() { foreach (var v in targets) { var vketCloudGUICanvas = v as VCCanvas; vketCloudGUICanvas.ApplyValues(); } } } }