| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using UnityEditor;
- using UnityEngine;
- using UnityEngine.UI;
- namespace AdaptUI
- {
- [CustomEditor(typeof(UICanvasScalerAdaptive))]
- public class UICanvasScalerAdaptiveEditor : Editor
- {
- private enum DeviceType { Default, iPhone, iPad }
- public override void OnInspectorGUI()
- {
- UICanvasScalerAdaptive script = (UICanvasScalerAdaptive)target;
- CanvasScaler canvasScaler = script.GetComponent<CanvasScaler>();
- EditorGUILayout.Space();
- EditorGUILayout.LabelField("🎛 自定义 CanvasScaler 适配", EditorStyles.boldLabel);
- // 📌 默认 Scaler
- DrawScalerEditor(script, "默认 Scaler", DeviceType.Default, ref script.defaultScaler, canvasScaler);
- // 📌 iPhone Scaler
- DrawScalerEditor(script, "iPhone Scaler", DeviceType.iPhone, ref script.iPhoneScaler, canvasScaler);
- // 📌 iPad Scaler
- DrawScalerEditor(script, "iPad Scaler", DeviceType.iPad, ref script.iPadScaler, canvasScaler);
- EditorGUILayout.Space();
- if (GUILayout.Button("自动 CanvasScaler 适配"))
- {
- script.ApplyScaler();
- }
- }
- private void DrawScalerEditor(UICanvasScalerAdaptive script, string title, DeviceType deviceType, ref CanvasScalerData scalerData, CanvasScaler canvasScaler)
- {
- EditorGUILayout.LabelField(title, EditorStyles.boldLabel);
- EditorGUI.indentLevel++;
- // 直接修改 scalerData,而不是创建新的变量
- scalerData.referenceResolution = EditorGUILayout.Vector2Field("Reference Resolution", scalerData.referenceResolution);
- scalerData.matchWidthOrHeight = EditorGUILayout.Slider("Match Width Or Height", scalerData.matchWidthOrHeight, 0f, 1f);
- // 📌 直接应用当前数据到 CanvasScaler 组件
- if (GUILayout.Button("应用 " + deviceType + " Scaler"))
- {
- canvasScaler.referenceResolution = scalerData.referenceResolution;
- canvasScaler.matchWidthOrHeight = scalerData.matchWidthOrHeight;
- // 记录修改,确保数据保存
- Undo.RecordObject(script, "Set " + deviceType + " Scaler");
- EditorUtility.SetDirty(script);
- }
- // 📌 获取当前 CanvasScaler 组件的值并赋值给当前布局
- if (deviceType != DeviceType.Default)
- {
- if (GUILayout.Button("获取当前组件的值"))
- {
- scalerData = new CanvasScalerData(canvasScaler);
- if (deviceType == DeviceType.iPhone)
- {
- script.iPhoneScaler = scalerData;
- }
- else if (deviceType == DeviceType.iPad)
- {
- script.iPadScaler = scalerData;
- }
- Undo.RecordObject(script, "Get " + deviceType + " Scaler");
- EditorUtility.SetDirty(script);
- }
- }
- EditorGUI.indentLevel--;
- EditorGUILayout.Space();
- }
- }
- }
|