UIAdaptiveTransformEditor.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace AdaptUI
  4. {
  5. [CustomEditor(typeof(UIAdaptiveTransform))]
  6. public class UIAdaptiveTransformEditor : Editor
  7. {
  8. private enum DeviceType { Default, iPhone, iPad }
  9. public override void OnInspectorGUI()
  10. {
  11. UIAdaptiveTransform script = (UIAdaptiveTransform)target;
  12. Transform targetTransform = script.transform;
  13. EditorGUILayout.Space();
  14. EditorGUILayout.LabelField("🎛 自定义 Transform 适配", EditorStyles.boldLabel);
  15. // 📌 初始 Transform
  16. DrawTransformEditor(script, "初始 Transform", DeviceType.Default, ref script.defaultTransform, targetTransform);
  17. // 📌 iPhone Transform
  18. DrawTransformEditor(script, "iPhone Transform", DeviceType.iPhone, ref script.iPhoneTransform, targetTransform);
  19. // 📌 iPad Transform
  20. DrawTransformEditor(script, "iPad Transform", DeviceType.iPad, ref script.iPadTransform, targetTransform);
  21. EditorGUILayout.Space();
  22. if (GUILayout.Button("自动 Transform 适配"))
  23. {
  24. script.ApplyTransform();
  25. }
  26. }
  27. // 📌 可视化 TransformData
  28. private void DrawTransformEditor(UIAdaptiveTransform script, string title, DeviceType deviceType, ref TransformData transformData, Transform targetTransform)
  29. {
  30. EditorGUILayout.LabelField(title, EditorStyles.boldLabel);
  31. EditorGUI.indentLevel++;
  32. // 直接修改 transformData,而不是创建新的变量
  33. transformData.rotation = EditorGUILayout.Vector3Field("Rotation (Euler)", transformData.rotation);
  34. transformData.scale = EditorGUILayout.Vector3Field("Scale", transformData.scale);
  35. // 📌 直接应用当前数据到 Transform 组件
  36. if (GUILayout.Button("应用 " + deviceType + " Transform"))
  37. {
  38. targetTransform.eulerAngles = transformData.rotation;
  39. targetTransform.localScale = transformData.scale;
  40. // 记录修改,确保数据保存
  41. Undo.RecordObject(script, "Set " + deviceType + " Transform");
  42. EditorUtility.SetDirty(script);
  43. }
  44. // 📌 获取当前 Transform 组件的值并赋值给当前布局
  45. if (deviceType != DeviceType.Default)
  46. {
  47. if (GUILayout.Button("获取当前组件的值"))
  48. {
  49. transformData = new TransformData(targetTransform); // 直接更新 transformData
  50. // 把数据存储到对应的 Transform 变量
  51. if (deviceType == DeviceType.iPhone)
  52. {
  53. script.iPhoneTransform = transformData;
  54. }
  55. else if (deviceType == DeviceType.iPad)
  56. {
  57. script.iPadTransform = transformData;
  58. }
  59. Undo.RecordObject(script, "Get " + deviceType + " Transform");
  60. EditorUtility.SetDirty(script);
  61. }
  62. }
  63. EditorGUI.indentLevel--;
  64. EditorGUILayout.Space();
  65. }
  66. }
  67. }