| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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<RectTransform>();
- 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();
- }
- }
- }
|