BackgroundAdapter.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. public static void SetRectTransformSize(RectTransform trans, Vector2 newSize)
  35. {
  36. Vector2 oldSize = trans.rect.size;
  37. Vector2 deltaSize = newSize - oldSize;
  38. trans.offsetMin = trans.offsetMin - new Vector2(deltaSize.x * trans.pivot.x, deltaSize.y * trans.pivot.y);
  39. trans.offsetMax = trans.offsetMax + new Vector2(deltaSize.x * (1f - trans.pivot.x), deltaSize.y * (1f - trans.pivot.y));
  40. }
  41. }
  42. public class CanvasUtils
  43. {
  44. public static void PlusSortOrder(GameObject src, GameObject des, int plusValue) {
  45. des.GetComponent<Canvas>().sortingOrder = src.GetComponent<Canvas>().sortingOrder + plusValue;
  46. }
  47. }
  48. [ExecuteAlways]
  49. public class BackgroundAdapter : MonoBehaviour
  50. {
  51. private CanvasScaler _scaler;
  52. void Start()
  53. {
  54. UpdateScale();
  55. }
  56. #if UNITY_EDITOR
  57. void Update()
  58. {
  59. UpdateScale();
  60. }
  61. #endif
  62. void UpdateScale()
  63. {
  64. if (_scaler == null) _scaler = GetComponentInParent<CanvasScaler>();
  65. if (_scaler == null) return;
  66. var resolution = _scaler.referenceResolution;
  67. var rt = _scaler.transform as RectTransform;
  68. if (rt == null) return;
  69. var screenSize = rt.sizeDelta;
  70. var factor = Mathf.Max(screenSize.x / resolution.x, screenSize.y / resolution.y);
  71. var scale = Vector3.one * factor;
  72. transform.localScale = scale;
  73. }
  74. }
  75. }