using UnityEngine; using UnityEngine.UI; namespace JC.Unity.UI { public class AdapterUtils { public static void MakeRectTransformFullScreen(MonoBehaviour mono) { RectTransform rtf = mono.GetComponent(); rtf.anchorMin = Vector2.zero; rtf.anchorMax = new Vector2(1, 1); rtf.offsetMin = Vector2.zero; rtf.offsetMax = Vector2.zero; } } public class RectTransformUtils { public static Vector3 CanvasV3ToScreenV3(Vector3 vector3, RectTransform rectTransform) { Vector2 canvasSize = rectTransform.GetComponentInParent().GetComponent().sizeDelta; vector3.y *= Screen.height / canvasSize.y; vector3.x *= Screen.width / canvasSize.x; return vector3; } public static Vector3 ScreenV3ToCanvasV3(Vector3 vector3, RectTransform rectTransform) { Vector2 canvasSize = rectTransform.GetComponentInParent().GetComponent().sizeDelta; vector3.y *= canvasSize.y / Screen.height; vector3.x *= canvasSize.x / Screen.width; return vector3; } public static Vector3 GetPositionByPivot(RectTransform rectTransform, Vector2 pivot) { Vector2 sizeInScreen = CanvasV3ToScreenV3(rectTransform.rect.size, rectTransform); Vector2 deltaPivot = pivot - rectTransform.pivot; Vector3 deltaPos = sizeInScreen * deltaPivot; return rectTransform.position + deltaPos; } } public class CanvasUtils { public static void PlusSortOrder(GameObject src, GameObject des, int plusValue) { des.GetComponent().sortingOrder = src.GetComponent().sortingOrder + plusValue; } public static int FindMaxSortingOrder() { Canvas[] cvsList = GameObject.FindObjectsOfType(); int maxSortOrder = 0; foreach (Canvas cvs in cvsList) { if (cvs.sortingOrder > maxSortOrder) maxSortOrder = cvs.sortingOrder; } return maxSortOrder; } } [ExecuteAlways] public class BackgroundAdapter : MonoBehaviour { private CanvasScaler _scaler; void Start() { UpdateScale(); } #if UNITY_EDITOR void Update() { UpdateScale(); } #endif void UpdateScale() { if (_scaler == null) _scaler = GetComponentInParent(); if (_scaler == null) return; var resolution = _scaler.referenceResolution; var rt = _scaler.transform as RectTransform; if (rt == null) return; var screenSize = rt.sizeDelta; var factor = Mathf.Max(screenSize.x / resolution.x, screenSize.y / resolution.y); var scale = Vector3.one * factor; transform.localScale = scale; } } }