| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using UnityEngine;
- #if UNITY_EDITOR
- using UnityEditor;
- #endif
- namespace AdaptUI
- {
- [System.Serializable]
- public struct TransformData
- {
- public Vector3 rotation;
- public Vector3 scale;
- public TransformData(Transform transform)
- {
- rotation = transform.eulerAngles;
- scale = transform.localScale;
- }
- public bool IsValid()
- {
- return rotation != Vector3.zero || scale != Vector3.one;
- }
- }
- [ExecuteAlways]
- [RequireComponent(typeof(RectTransform))]
- public class UIAdaptiveTransform : MonoBehaviour
- {
- [Header("初始 Transform")]
- [SerializeField] public TransformData defaultTransform;
- [Header("iPhone Transform")]
- [SerializeField] public TransformData iPhoneTransform;
- [Header("iPad Transform")]
- [SerializeField] public TransformData iPadTransform;
- private Transform cachedTransform;
- private bool isInitialized = false;
- private void Awake()
- {
- cachedTransform = transform;
- #if UNITY_EDITOR
- // 如果未初始化,不要应用 Transform,等待 Reset() 赋值
- if (!isInitialized)
- {
- // Debug.Log("UIAdaptiveTransform: 未初始化,跳过 ApplyTransform()");
- if (Application.isPlaying)
- ApplyTransform();
- return;
- }
- #endif
- ApplyTransform();
- }
- #if UNITY_EDITOR
- private void Reset()
- {
- cachedTransform = transform;
- if (!isInitialized)
- {
- // Debug.Log("UIAdaptiveTransform: 首次挂载,自动记录当前 Transform 作为默认值");
- defaultTransform = new TransformData(cachedTransform);
- iPhoneTransform = new TransformData(cachedTransform);
- iPadTransform = new TransformData(cachedTransform);
- isInitialized = true; // ✅ 记录已初始化,避免 Awake() 误触
- }
- }
- #endif
- public void ApplyTransform()
- {
- if (cachedTransform == null) return;
- DeviceTypeHelper.DeviceType deviceType = DeviceTypeHelper.DetectDeviceType();
- TransformData targetTransform = (deviceType == DeviceTypeHelper.DeviceType.iPhone) ? iPhoneTransform : iPadTransform;
- cachedTransform.eulerAngles = targetTransform.rotation;
- cachedTransform.localScale = targetTransform.scale;
- // Debug.Log($"📌 Transform 适配完成: 设备 = {deviceType}, 旋转 = {targetTransform.rotation}, 缩放 = {targetTransform.scale}");
- }
- public TransformData GetTransformData(bool isIpad)
- {
- return isIpad ? iPadTransform : iPhoneTransform;
- }
- public void SetTransformData(bool isIpad, Transform transform)
- {
- if (isIpad)
- {
- iPadTransform = new TransformData(transform);
- }
- else
- {
- iPhoneTransform = new TransformData(transform);
- }
- // Debug.Log($"📌 UIAdaptiveTransform: 设置 Transform 为 {(isIpad ? "iPad" : "iPhone")}");
- }
- }
- }
|