BackgroundAdapter.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. [ExecuteAlways]
  36. public class BackgroundAdapter : MonoBehaviour
  37. {
  38. private CanvasScaler _scaler;
  39. void Start()
  40. {
  41. UpdateScale();
  42. }
  43. #if UNITY_EDITOR
  44. void Update()
  45. {
  46. UpdateScale();
  47. }
  48. #endif
  49. void UpdateScale()
  50. {
  51. if (_scaler == null) _scaler = GetComponentInParent<CanvasScaler>();
  52. if (_scaler == null) return;
  53. var resolution = _scaler.referenceResolution;
  54. var rt = _scaler.transform as RectTransform;
  55. if (rt == null) return;
  56. var screenSize = rt.sizeDelta;
  57. var factor = Mathf.Max(screenSize.x / resolution.x, screenSize.y / resolution.y);
  58. var scale = Vector3.one * factor;
  59. transform.localScale = scale;
  60. }
  61. }
  62. }