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