UIAdaptiveTransform.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. return;
  43. }
  44. #endif
  45. ApplyTransform();
  46. }
  47. #if UNITY_EDITOR
  48. private void Reset()
  49. {
  50. cachedTransform = transform;
  51. if (!isInitialized)
  52. {
  53. // Debug.Log("UIAdaptiveTransform: 首次挂载,自动记录当前 Transform 作为默认值");
  54. defaultTransform = new TransformData(cachedTransform);
  55. iPhoneTransform = new TransformData(cachedTransform);
  56. iPadTransform = new TransformData(cachedTransform);
  57. isInitialized = true; // ✅ 记录已初始化,避免 Awake() 误触
  58. }
  59. }
  60. #endif
  61. public void ApplyTransform()
  62. {
  63. if (cachedTransform == null) return;
  64. DeviceTypeHelper.DeviceType deviceType = DeviceTypeHelper.DetectDeviceType();
  65. TransformData targetTransform = (deviceType == DeviceTypeHelper.DeviceType.iPhone) ? iPhoneTransform : iPadTransform;
  66. cachedTransform.eulerAngles = targetTransform.rotation;
  67. cachedTransform.localScale = targetTransform.scale;
  68. // Debug.Log($"📌 Transform 适配完成: 设备 = {deviceType}, 旋转 = {targetTransform.rotation}, 缩放 = {targetTransform.scale}");
  69. }
  70. public TransformData GetTransformData(bool isIpad)
  71. {
  72. return isIpad ? iPadTransform : iPhoneTransform;
  73. }
  74. public void SetTransformData(bool isIpad, Transform transform)
  75. {
  76. if (isIpad)
  77. {
  78. iPadTransform = new TransformData(transform);
  79. }
  80. else
  81. {
  82. iPhoneTransform = new TransformData(transform);
  83. }
  84. // Debug.Log($"📌 UIAdaptiveTransform: 设置 Transform 为 {(isIpad ? "iPad" : "iPhone")}");
  85. }
  86. }
  87. }