BackgroundAdapter.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. namespace JC.Unity.UI {
  4. public class AdapterUtils
  5. {
  6. public static void MakeRectTransformFullScreen(MonoBehaviour mono) {
  7. RectTransform rtf = mono.GetComponent<RectTransform>();
  8. rtf.anchorMin = Vector2.zero;
  9. rtf.anchorMax = new Vector2(1, 1);
  10. rtf.offsetMin = Vector2.zero;
  11. rtf.offsetMax = Vector2.zero;
  12. }
  13. }
  14. public class RectTransformUtils
  15. {
  16. public static Vector3 CanvasV3ToScreenV3(Vector3 vector3, RectTransform rectTransform) {
  17. Vector2 canvasSize = rectTransform.GetComponentInParent<CanvasScaler>().GetComponent<RectTransform>().sizeDelta;
  18. vector3.y *= Screen.height / canvasSize.y;
  19. vector3.x *= Screen.width / canvasSize.x;
  20. return vector3;
  21. }
  22. public static Vector3 ScreenV3ToCanvasV3(Vector3 vector3, RectTransform rectTransform) {
  23. Vector2 canvasSize = rectTransform.GetComponentInParent<CanvasScaler>().GetComponent<RectTransform>().sizeDelta;
  24. vector3.y *= canvasSize.y / Screen.height;
  25. vector3.x *= canvasSize.x / Screen.width;
  26. return vector3;
  27. }
  28. public static Vector3 GetPositionByPivot(RectTransform rectTransform, Vector2 pivot) {
  29. Vector2 sizeInScreen = CanvasV3ToScreenV3(rectTransform.rect.size, rectTransform);
  30. Vector2 deltaPivot = pivot - rectTransform.pivot;
  31. Vector3 deltaPos = sizeInScreen * deltaPivot;
  32. return rectTransform.position + deltaPos;
  33. }
  34. }
  35. public class CanvasUtils
  36. {
  37. public static void PlusSortOrder(GameObject src, GameObject des, int plusValue) {
  38. des.GetComponent<Canvas>().sortingOrder = src.GetComponent<Canvas>().sortingOrder + plusValue;
  39. }
  40. public static int FindMaxSortingOrder() {
  41. Canvas[] cvsList = GameObject.FindObjectsOfType<Canvas>();
  42. int maxSortOrder = 0;
  43. foreach (Canvas cvs in cvsList) {
  44. if (cvs.sortingOrder > maxSortOrder) maxSortOrder = cvs.sortingOrder;
  45. }
  46. return maxSortOrder;
  47. }
  48. }
  49. [ExecuteAlways]
  50. public class BackgroundAdapter : MonoBehaviour
  51. {
  52. private CanvasScaler _scaler;
  53. void Start()
  54. {
  55. UpdateScale();
  56. }
  57. #if UNITY_EDITOR
  58. void Update()
  59. {
  60. UpdateScale();
  61. }
  62. #endif
  63. void UpdateScale()
  64. {
  65. if (_scaler == null) _scaler = GetComponentInParent<CanvasScaler>();
  66. if (_scaler == null) return;
  67. var resolution = _scaler.referenceResolution;
  68. var rt = _scaler.transform as RectTransform;
  69. if (rt == null) return;
  70. var screenSize = rt.sizeDelta;
  71. var factor = Mathf.Max(screenSize.x / resolution.x, screenSize.y / resolution.y);
  72. var scale = Vector3.one * factor;
  73. transform.localScale = scale;
  74. }
  75. }
  76. }