Preferredサイズに上限を設定する
やること
たとえば文章を表示するウィンドウを作った時。
- 文章が短いうちは文章に合わせてウィンドウが大きくなる。
- ある一定サイズ以上にはウィンドウは大きくならず、文章は改行されて表示される
みたいな機能をつくる。
イッテイサイズイジョウデカイギョウスルーノ pic.twitter.com/sOGvIGblRh
— enu (@_enu) 2016, 1月 6
コード
Unity5.3.1p1
[DisallowMultipleComponent] [RequireComponent(typeof(Text))] public class LayoutMaxSize : MonoBehaviour, ILayoutElement { Text text; Text Text { get { return text ?? (text = GetComponent<Text>()); } } [SerializeField] float maxWidth = -1; [SerializeField] float maxHeight = -1; public float flexibleHeight { get { return -1f; } } public float flexibleWidth { get { return -1f; } } public int layoutPriority { get { return 1; } } public float minHeight { get { return -1f; } } public float minWidth { get { return -1f; } } public float preferredHeight { get { if (maxHeight < 0f) { return Text.preferredHeight; } return Mathf.Min(Text.preferredHeight, maxHeight); } set { maxHeight = value; SetDirty(); } } public float preferredWidth { get { if (maxWidth < 0f) { return Text.preferredWidth; } return Mathf.Min(Text.preferredWidth, maxWidth); } set { maxWidth = value; SetDirty(); } } public void CalculateLayoutInputHorizontal() { } public void CalculateLayoutInputVertical() { } protected void SetDirty() { if (!gameObject.activeInHierarchy) { return; } LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform); } #if UNITY_EDITOR protected void OnValidate() { SetDirty(); } #endif }
アレ
- 参照するコンポーネントは
Text
でなくても良いはずで、究極的には他のILayoutElement
を参照して云々~という形にできる。面倒なのでやってない。 - 標準コンポーネントで実装できそうな気もする。