UIUnsafeArea.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.EventSystems;
  5. using UnityEngine.UI;
  6. using Edge = UnityEngine.RectTransform.Edge;
  7. public class UIUnsafeArea : UIControlArea
  8. {
  9. [SerializeField]
  10. private Edge m_UnsafeEdge = Edge.Top;
  11. [SerializeField]
  12. private bool m_SafeSide1 = false;
  13. [SerializeField]
  14. private bool m_SafeSide2 = false;
  15. protected override void CalcRect(Rect safeArea, ScreenOrientation orientation, int width, int height, out Vector2 min, out Vector2 max)
  16. {
  17. // 换算成u3d的屏幕坐标(左下角)
  18. float minX, minY, maxX, maxY;
  19. if (m_UnsafeEdge == Edge.Bottom)
  20. {
  21. minX = (m_SafeSide2 ? safeArea.x : 0);
  22. minY = 0;
  23. maxX = (m_SafeSide1 ? (safeArea.x + safeArea.width) : width);
  24. maxY = safeArea.y;
  25. }
  26. else if (m_UnsafeEdge == Edge.Left)
  27. {
  28. minX = 0;
  29. minY = (m_SafeSide1 ? safeArea.y : 0);
  30. maxX = safeArea.x;
  31. maxY = (m_SafeSide2 ? (safeArea.y + safeArea.height) : height);
  32. }
  33. else if (m_UnsafeEdge == Edge.Right)
  34. {
  35. minX = (safeArea.x + safeArea.width);
  36. minY = (m_SafeSide2 ? safeArea.y : 0);
  37. maxX = width;
  38. maxY = (m_SafeSide1 ? (safeArea.y + safeArea.height) : height);
  39. }
  40. else
  41. {
  42. minX = (m_SafeSide1 ? safeArea.x : 0);
  43. minY = safeArea.y + safeArea.height;
  44. maxX = (m_SafeSide2 ? (safeArea.x + safeArea.width) : width);
  45. maxY = height;
  46. }
  47. min = new Vector2(minX, minY);
  48. max = new Vector2(maxX, maxY);
  49. }
  50. }