using UnityEditor; using UnityEngine; namespace AdaptUI { [CustomEditor(typeof(UIAdaptiveTransform))] public class UIAdaptiveTransformEditor : Editor { private enum DeviceType { Default, iPhone, iPad } public override void OnInspectorGUI() { UIAdaptiveTransform script = (UIAdaptiveTransform)target; Transform targetTransform = script.transform; EditorGUILayout.Space(); EditorGUILayout.LabelField("🎛 自定义 Transform 适配", EditorStyles.boldLabel); // 📌 初始 Transform DrawTransformEditor(script, "初始 Transform", DeviceType.Default, ref script.defaultTransform, targetTransform); // 📌 iPhone Transform DrawTransformEditor(script, "iPhone Transform", DeviceType.iPhone, ref script.iPhoneTransform, targetTransform); // 📌 iPad Transform DrawTransformEditor(script, "iPad Transform", DeviceType.iPad, ref script.iPadTransform, targetTransform); EditorGUILayout.Space(); if (GUILayout.Button("自动 Transform 适配")) { script.ApplyTransform(); } } // 📌 可视化 TransformData private void DrawTransformEditor(UIAdaptiveTransform script, string title, DeviceType deviceType, ref TransformData transformData, Transform targetTransform) { EditorGUILayout.LabelField(title, EditorStyles.boldLabel); EditorGUI.indentLevel++; // 直接修改 transformData,而不是创建新的变量 transformData.rotation = EditorGUILayout.Vector3Field("Rotation (Euler)", transformData.rotation); transformData.scale = EditorGUILayout.Vector3Field("Scale", transformData.scale); // 📌 直接应用当前数据到 Transform 组件 if (GUILayout.Button("应用 " + deviceType + " Transform")) { targetTransform.eulerAngles = transformData.rotation; targetTransform.localScale = transformData.scale; // 记录修改,确保数据保存 Undo.RecordObject(script, "Set " + deviceType + " Transform"); EditorUtility.SetDirty(script); } // 📌 获取当前 Transform 组件的值并赋值给当前布局 if (deviceType != DeviceType.Default) { if (GUILayout.Button("获取当前组件的值")) { transformData = new TransformData(targetTransform); // 直接更新 transformData // 把数据存储到对应的 Transform 变量 if (deviceType == DeviceType.iPhone) { script.iPhoneTransform = transformData; } else if (deviceType == DeviceType.iPad) { script.iPadTransform = transformData; } Undo.RecordObject(script, "Get " + deviceType + " Transform"); EditorUtility.SetDirty(script); } } EditorGUI.indentLevel--; EditorGUILayout.Space(); } } }