| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using UnityEngine;
- using UnityEngine.UI;
- namespace AdaptUI
- {
- [System.Serializable]
- public struct CanvasScalerData
- {
- public Vector2 referenceResolution;
- public float matchWidthOrHeight;
- public CanvasScalerData(CanvasScaler scaler)
- {
- referenceResolution = scaler.referenceResolution;
- matchWidthOrHeight = scaler.matchWidthOrHeight;
- }
- public bool IsValid()
- {
- return referenceResolution != Vector2.zero;
- }
- }
- [ExecuteAlways]
- [RequireComponent(typeof(CanvasScaler))]
- public class UICanvasScalerAdaptive : MonoBehaviour
- {
- [Header("🎛 默认 CanvasScaler 配置")]
- [SerializeField] public CanvasScalerData defaultScaler;
-
- [Header("📱 iPhone CanvasScaler 配置")]
- [SerializeField] public CanvasScalerData iPhoneScaler;
- [Header("💻 iPad CanvasScaler 配置")]
- [SerializeField] public CanvasScalerData iPadScaler;
- private CanvasScaler canvasScaler;
- private bool isInitialized = false;
- private void Awake()
- {
- canvasScaler = GetComponent<CanvasScaler>();
- #if UNITY_EDITOR
- if (!isInitialized)
- {
- // Debug.Log("UICanvasScalerAdaptive: 未初始化,跳过 ApplyScaler()");
- if (Application.isPlaying)
- ApplyScaler();
- return;
- }
- #endif
- ApplyScaler(); // 运行时应用 UI 适配
- }
- #if UNITY_EDITOR
- private void Reset()
- {
- canvasScaler = GetComponent<CanvasScaler>();
- if (!isInitialized)
- {
- // Debug.Log("UICanvasScalerAdaptive: 首次挂载,自动记录当前 CanvasScaler 配置");
- defaultScaler = new CanvasScalerData(canvasScaler);
- iPhoneScaler = new CanvasScalerData(canvasScaler);
- iPadScaler = new CanvasScalerData(canvasScaler);
- isInitialized = true;
- }
- }
- #endif
- public void ApplyScaler()
- {
- if (canvasScaler == null) return;
- DeviceTypeHelper.DeviceType deviceType = DeviceTypeHelper.DetectDeviceType();
- CanvasScalerData targetScaler = (deviceType == DeviceTypeHelper.DeviceType.iPhone) ? iPhoneScaler : iPadScaler;
- canvasScaler.referenceResolution = targetScaler.referenceResolution;
- canvasScaler.matchWidthOrHeight = targetScaler.matchWidthOrHeight;
- // Debug.Log($"📌 CanvasScaler 适配完成: 设备 = {deviceType}, 分辨率 = {targetScaler.referenceResolution}, Match = {targetScaler.matchWidthOrHeight}");
- }
- public CanvasScalerData GetScaler(bool isIpad)
- {
- return isIpad ? iPadScaler : iPhoneScaler;
- }
- public void SetScaler(bool isIpad, CanvasScaler scaler)
- {
- if (isIpad)
- {
- iPadScaler = new CanvasScalerData(scaler);
- }
- else
- {
- iPhoneScaler = new CanvasScalerData(scaler);
- }
- // Debug.Log($"📌 UICanvasScalerAdaptive: 设置 CanvasScaler 为 {(isIpad ? "iPad" : "iPhone")}");
- }
- }
- }
|