UISafeAreaInspector.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using System;
  2. using System.Reflection;
  3. using UnityEngine;
  4. using UnityEditor;
  5. [CustomEditor(typeof(UISafeArea))]
  6. public class UISafeAreaInspector : Editor
  7. {
  8. private MethodInfo m_CalcAdaptMethodInfo = null;
  9. private MethodInfo m_GetSizeOfMainGameViewMethodInfo = null;
  10. private void OnEnable()
  11. {
  12. Type gameViewType = typeof(Editor).Assembly.GetType("UnityEditor.GameView");
  13. m_GetSizeOfMainGameViewMethodInfo = gameViewType.GetMethod("GetSizeOfMainGameView", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
  14. m_CalcAdaptMethodInfo = typeof(UIControlArea).GetMethod("CalcAdapt", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(Rect), typeof(ScreenOrientation), typeof(int), typeof(int) }, null);
  15. }
  16. public override void OnInspectorGUI()
  17. {
  18. EditorGUILayout.HelpBox("会自动根据设备方向变化", MessageType.Info);
  19. EditorGUILayout.Space();
  20. serializedObject.Update();
  21. Editor.DrawPropertiesExcluding(serializedObject, "m_Script");
  22. if (serializedObject.ApplyModifiedProperties())
  23. {
  24. if (Application.isPlaying && SafeRectCheck.Instance && m_GetSizeOfMainGameViewMethodInfo != null)
  25. {
  26. Rect rect = SafeRectCheck.Instance.safeArea;
  27. ScreenOrientation orientation = SafeRectCheck.Instance.orientation;
  28. Vector2 screenSize = (Vector2)m_GetSizeOfMainGameViewMethodInfo.Invoke(null, null);
  29. m_CalcAdaptMethodInfo.Invoke(target as UISafeArea, new object[] { rect, orientation, SafeRectCheck.Instance.screenWidth, SafeRectCheck.Instance.screenHeight});
  30. }
  31. }
  32. }
  33. }