UIAdaptiveTransform.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using UnityEngine;
  2. #if UNITY_EDITOR
  3. using UnityEditor;
  4. #endif
  5. namespace AdaptUI
  6. {
  7. [System.Serializable]
  8. public struct TransformData
  9. {
  10. public Vector3 rotation;
  11. public Vector3 scale;
  12. public TransformData(Transform transform)
  13. {
  14. rotation = transform.eulerAngles;
  15. scale = transform.localScale;
  16. }
  17. public bool IsValid()
  18. {
  19. return rotation != Vector3.zero || scale != Vector3.one;
  20. }
  21. }
  22. [ExecuteAlways]
  23. [RequireComponent(typeof(RectTransform))]
  24. public class UIAdaptiveTransform : MonoBehaviour
  25. {
  26. [Header("初始 Transform")]
  27. [SerializeField] public TransformData defaultTransform;
  28. [Header("iPhone Transform")]
  29. [SerializeField] public TransformData iPhoneTransform;
  30. [Header("iPad Transform")]
  31. [SerializeField] public TransformData iPadTransform;
  32. private Transform cachedTransform;
  33. private bool isInitialized = false;
  34. private void Awake()
  35. {
  36. cachedTransform = transform;
  37. #if UNITY_EDITOR
  38. // 如果未初始化,不要应用 Transform,等待 Reset() 赋值
  39. if (!isInitialized)
  40. {
  41. // Debug.Log("UIAdaptiveTransform: 未初始化,跳过 ApplyTransform()");
  42. if (Application.isPlaying)
  43. ApplyTransform();
  44. return;
  45. }
  46. #endif
  47. ApplyTransform();
  48. }
  49. #if UNITY_EDITOR
  50. private void Reset()
  51. {
  52. cachedTransform = transform;
  53. if (!isInitialized)
  54. {
  55. // Debug.Log("UIAdaptiveTransform: 首次挂载,自动记录当前 Transform 作为默认值");
  56. defaultTransform = new TransformData(cachedTransform);
  57. iPhoneTransform = new TransformData(cachedTransform);
  58. iPadTransform = new TransformData(cachedTransform);
  59. isInitialized = true; // ✅ 记录已初始化,避免 Awake() 误触
  60. }
  61. }
  62. #endif
  63. public void ApplyTransform()
  64. {
  65. if (cachedTransform == null) return;
  66. DeviceTypeHelper.DeviceType deviceType = DeviceTypeHelper.DetectDeviceType();
  67. TransformData targetTransform = (deviceType == DeviceTypeHelper.DeviceType.iPhone) ? iPhoneTransform : iPadTransform;
  68. cachedTransform.eulerAngles = targetTransform.rotation;
  69. cachedTransform.localScale = targetTransform.scale;
  70. // Debug.Log($"📌 Transform 适配完成: 设备 = {deviceType}, 旋转 = {targetTransform.rotation}, 缩放 = {targetTransform.scale}");
  71. }
  72. public TransformData GetTransformData(bool isIpad)
  73. {
  74. return isIpad ? iPadTransform : iPhoneTransform;
  75. }
  76. public void SetTransformData(bool isIpad, Transform transform)
  77. {
  78. if (isIpad)
  79. {
  80. iPadTransform = new TransformData(transform);
  81. }
  82. else
  83. {
  84. iPhoneTransform = new TransformData(transform);
  85. }
  86. // Debug.Log($"📌 UIAdaptiveTransform: 设置 Transform 为 {(isIpad ? "iPad" : "iPhone")}");
  87. }
  88. }
  89. }