RectTransformUtils.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using UnityEngine;
  2. public static class RectTransformUtils
  3. {
  4. public static void SetDefaultScale(this RectTransform trans)
  5. {
  6. trans.localScale = Vector3.one;
  7. }
  8. public static void SetPivotAndAnchors(this RectTransform trans, Vector2 vec)
  9. {
  10. trans.pivot = vec;
  11. trans.anchorMin = vec;
  12. trans.anchorMax = vec;
  13. }
  14. public static Vector2 GetSize(this RectTransform trans)
  15. {
  16. return trans.rect.size;
  17. }
  18. public static float GetWidth(this RectTransform trans)
  19. {
  20. return trans.rect.width;
  21. }
  22. public static float GetHeight(this RectTransform trans)
  23. {
  24. return trans.rect.height;
  25. }
  26. public static void SetPivotPosition(this RectTransform trans, Vector2 newPos)
  27. {
  28. trans.localPosition = new Vector3(newPos.x, newPos.y, trans.localPosition.z);
  29. }
  30. public static void SetLeftBottomPosition(this RectTransform trans, Vector2 newPos)
  31. {
  32. trans.localPosition = new Vector3(newPos.x + (trans.pivot.x * trans.rect.width), newPos.y + (trans.pivot.y * trans.rect.height), trans.localPosition.z);
  33. }
  34. public static void SetLeftTopPosition(this RectTransform trans, Vector2 newPos)
  35. {
  36. trans.localPosition = new Vector3(newPos.x + (trans.pivot.x * trans.rect.width), newPos.y - ((1.0f - trans.pivot.y) * trans.rect.height), trans.localPosition.z);
  37. }
  38. public static void SetRightBottomPosition(this RectTransform trans, Vector2 newPos)
  39. {
  40. trans.localPosition = new Vector3(newPos.x - ((1.0f - trans.pivot.x) * trans.rect.width), newPos.y + (trans.pivot.y * trans.rect.height), trans.localPosition.z);
  41. }
  42. public static void SetRightTopPosition(this RectTransform trans, Vector2 newPos)
  43. {
  44. trans.localPosition = new Vector3(newPos.x - ((1.0f - trans.pivot.x) * trans.rect.width), newPos.y - ((1.0f - trans.pivot.y) * trans.rect.height), trans.localPosition.z);
  45. }
  46. public static void SetSize(this RectTransform trans, Vector2 newSize)
  47. {
  48. Vector2 oldSize = trans.rect.size;
  49. Vector2 deltaSize = newSize - oldSize;
  50. trans.offsetMin = trans.offsetMin - new Vector2(deltaSize.x * trans.pivot.x, deltaSize.y * trans.pivot.y);
  51. trans.offsetMax = trans.offsetMax + new Vector2(deltaSize.x * (1.0f - trans.pivot.x), deltaSize.y * (1.0f - trans.pivot.y));
  52. }
  53. public static void SetWidth(this RectTransform trans, float newSize)
  54. {
  55. SetSize(trans, new Vector2(newSize, trans.rect.size.y));
  56. }
  57. public static void SetHeight(this RectTransform trans, float newSize)
  58. {
  59. SetSize(trans, new Vector2(trans.rect.size.x, newSize));
  60. }
  61. public static Rect GetScreenRect(this RectTransform rectTransform, Canvas canvas)
  62. {
  63. Vector3[] corners = new Vector3[4];
  64. Vector3[] screenCorners = new Vector3[2];
  65. rectTransform.GetWorldCorners(corners);
  66. if (canvas.renderMode == RenderMode.ScreenSpaceCamera || canvas.renderMode == RenderMode.WorldSpace)
  67. {
  68. screenCorners[0] = RectTransformUtility.WorldToScreenPoint(canvas.worldCamera, corners[1]);
  69. screenCorners[1] = RectTransformUtility.WorldToScreenPoint(canvas.worldCamera, corners[3]);
  70. }
  71. else
  72. {
  73. screenCorners[0] = RectTransformUtility.WorldToScreenPoint(null, corners[1]);
  74. screenCorners[1] = RectTransformUtility.WorldToScreenPoint(null, corners[3]);
  75. }
  76. screenCorners[0].y = Screen.height - screenCorners[0].y;
  77. screenCorners[1].y = Screen.height - screenCorners[1].y;
  78. return new Rect(screenCorners[0], screenCorners[1] - screenCorners[0]);
  79. }
  80. }