using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace AdaptUI { [CustomEditor(typeof(UIAdaptiveRect))] public class UIAdaptiveRectEditor : Editor { private enum DeviceType { init, iPhone, iPad } public override void OnInspectorGUI() { UIAdaptiveRect script = (UIAdaptiveRect)target; RectTransform rectTransform = script.GetComponent(); EditorGUILayout.Space(); EditorGUILayout.LabelField("自定义 UI 适配", EditorStyles.boldLabel); // 📌 初始 布局 DrawLayoutEditor(script, "初始 布局", DeviceType.init, ref script.defaultLayout, rectTransform); // 📌 iPhone 布局 DrawLayoutEditor(script, "iPhone 布局", DeviceType.iPhone, ref script.iPhoneLayout, rectTransform); // 📌 iPad 布局 DrawLayoutEditor(script, "iPad 布局", DeviceType.iPad, ref script.iPadLayout, rectTransform); EditorGUILayout.Space(); if (GUILayout.Button("自动 UI 适配")) { script.ApplyLayout(); } } // 📌 可视化 RectTransformData(类似官方 Anchor Presets) private void DrawLayoutEditor(UIAdaptiveRect script, string title, DeviceType deviceType, ref RectTransformData layout, RectTransform rectTransform) { EditorGUILayout.LabelField(title, EditorStyles.boldLabel); EditorGUI.indentLevel++; // 直接修改 layout,而不是创建新的变量 layout.anchorMin = EditorGUILayout.Vector2Field("Anchor Min", layout.anchorMin); layout.anchorMax = EditorGUILayout.Vector2Field("Anchor Max", layout.anchorMax); layout.anchoredPosition = EditorGUILayout.Vector2Field("Anchored Position", layout.anchoredPosition); layout.sizeDelta = EditorGUILayout.Vector2Field("Size Delta", layout.sizeDelta); // 📌 直接应用当前数据到 RectTransform if (GUILayout.Button("应用 " + deviceType + " 布局")) { // 将 layout 中的数据应用到当前对象的 RectTransform 上 rectTransform.anchorMin = layout.anchorMin; rectTransform.anchorMax = layout.anchorMax; rectTransform.anchoredPosition = layout.anchoredPosition; rectTransform.sizeDelta = layout.sizeDelta; // 📌 记录修改,确保数据保存 Undo.RecordObject(script, "Set " + deviceType + " Layout"); EditorUtility.SetDirty(script); } // 📌 获取当前 RectTransform 组件的值并赋值给当前布局 if (deviceType != DeviceType.init) { if (GUILayout.Button("获取当前组件的值")) { layout = new RectTransformData(rectTransform); // 直接更新 layout 数据 // 把数据存储到对应的布局变量 if (deviceType == DeviceType.iPhone) { script.iPhoneLayout = layout; } else if (deviceType == DeviceType.iPad) { script.iPadLayout = layout; } Undo.RecordObject(script, "Get " + deviceType + " Layout"); EditorUtility.SetDirty(script); } } EditorGUI.indentLevel--; EditorGUILayout.Space(); } } }