using System.Collections.Generic; using UnityEngine; public static class RectTransformExtension { private static Dictionary originSizeDeltaDict = new Dictionary(); private static void AddToOriginSizeDeltaDict(RectTransform rectTrans) { if (!originSizeDeltaDict.ContainsKey(rectTrans)) { originSizeDeltaDict.Add(rectTrans, rectTrans.sizeDelta); } } public static void RecoverSizeDelta(this RectTransform rectTrans) { if (originSizeDeltaDict.ContainsKey(rectTrans)) { rectTrans.sizeDelta = originSizeDeltaDict[rectTrans]; } } public static void SetSizeDeltaXByRatio(this RectTransform rectTrans, float xRatio) { AddToOriginSizeDeltaDict(rectTrans); RecoverSizeDelta(rectTrans); Vector2 newSizeDelta = new Vector2(); newSizeDelta.x = rectTrans.sizeDelta.x * xRatio; newSizeDelta.y = rectTrans.sizeDelta.y; rectTrans.sizeDelta = newSizeDelta; } public static void SetSizeDeltaYByRatio(this RectTransform rectTrans, float yRatio) { AddToOriginSizeDeltaDict(rectTrans); RecoverSizeDelta(rectTrans); Vector2 newSizeDelta = new Vector2(); newSizeDelta.x = rectTrans.sizeDelta.x; newSizeDelta.y = rectTrans.sizeDelta.y * yRatio; rectTrans.sizeDelta = newSizeDelta; } public static void SetSizeDeltaByRatio(this RectTransform rectTrans, float xRatio, float yRatio) { AddToOriginSizeDeltaDict(rectTrans); RecoverSizeDelta(rectTrans); Vector2 newSizeDelta = new Vector2(); newSizeDelta.x = rectTrans.sizeDelta.x*xRatio; newSizeDelta.y = rectTrans.sizeDelta.y*yRatio; rectTrans.sizeDelta = newSizeDelta; } public static void SetSizeDeltaX(this RectTransform rectTrans, float xSize) { AddToOriginSizeDeltaDict(rectTrans); RecoverSizeDelta(rectTrans); Vector2 newSizeDelta = new Vector2(); newSizeDelta.x = xSize; newSizeDelta.y = rectTrans.sizeDelta.y; rectTrans.sizeDelta = newSizeDelta; } public static void SetSizeDeltaY(this RectTransform rectTrans, float ySize) { AddToOriginSizeDeltaDict(rectTrans); RecoverSizeDelta(rectTrans); Vector2 newSizeDelta = new Vector2(); newSizeDelta.x = rectTrans.sizeDelta.x; newSizeDelta.y = ySize; rectTrans.sizeDelta = newSizeDelta; } public static void SetSizeDelta(this RectTransform rectTrans, float xSize, float ySize) { AddToOriginSizeDeltaDict(rectTrans); RecoverSizeDelta(rectTrans); Vector2 newSizeDelta = new Vector2(); newSizeDelta.x = xSize; newSizeDelta.y = ySize; rectTrans.sizeDelta = newSizeDelta; } }