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