この記事でのバージョン
Unity 2017.2.0f3
はじめに
今回はタイトル通り、uGUIのTextで文字列がぴったり収まるサイズを取得する方法のご紹介です!
preferredWidth, preferredHeight
方法は簡単、TextのpreferredWidth, preferredHeightを参照するだけ。
//Textを取得 Text text = GetComponent<Text>(); //取得したTextをピッタリ収まるようにサイズ変更 text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight);
これでFont, Font Style, Font Size等、諸々の数値を考慮した状態でピッタリ収まるようになります。
ただし、以下のようにTextのHorizontal OverflowがWrapで、Widthが十分でない状態だと、
Heightがやたら大きくなってしまいます。
これは改行込みのサイズが反映されてしまっているためで、
TextのHorizontal OverflowをOverflowにするか、
以下のように2回サイズ変更を実行する事で対応出来ます。
//Textを取得 Text text = GetComponent<Text>(); //取得したTextをピッタリ収まるようにサイズ変更(Heightが長い状態) text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight); //再度、ピッタリ収まるようにサイズ変更(Heightもピッタリ合うように) text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight);
ContentSizeFitter
余談ですが、自動でサイズを調整するContentSizeFitterというものもあります。
プログラムからテキストを変更しても自動でサイズを調整してくれますが、
残念ながらテキストを設定した瞬間にサイズが変わるわけではないので、
ピッタリのサイズを取得したい場合は結局preferredWidth, preferredHeightが必要になります。
//Textを取得し、テキストを変更 Text text = GetComponent<Text>(); text.text = "あたらしいテキスト"; //現在のサイズとピッタリのサイズをログで表示(まだピッタリになっていない) Debug.Log(text.rectTransform.sizeDelta.x + " : " + text.preferredWidth);
参考