(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

文字列がTextにピッタリ収まるサイズを取得する方法と注意点【Unity】【uGUI】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2017.2.0f3


はじめに

今回はタイトル通り、uGUIのTextで文字列がぴったり収まるサイズを取得する方法のご紹介です!


f:id:kan_kikuchi:20171106070439g:plain


preferredWidth, preferredHeight

方法は簡単、TextのpreferredWidth, preferredHeightを参照するだけ。

//Textを取得
Text text = GetComponent<Text>();

//取得したTextをピッタリ収まるようにサイズ変更
text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight);

f:id:kan_kikuchi:20171106070439g:plain


これでFont, Font Style, Font Size等、諸々の数値を考慮した状態でピッタリ収まるようになります。


ただし、以下のようにTextのHorizontal OverflowがWrapで、Widthが十分でない状態だと、


f:id:kan_kikuchi:20171106070613j:plain


Heightがやたら大きくなってしまいます。


f:id:kan_kikuchi:20171106070630j:plain


これは改行込みのサイズが反映されてしまっているためで、

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というものもあります。



f:id:kan_kikuchi:20171106071438j:plain


プログラムからテキストを変更しても自動でサイズを調整してくれますが、

残念ながらテキストを設定した瞬間にサイズが変わるわけではないので、

ピッタリのサイズを取得したい場合は結局preferredWidth, preferredHeightが必要になります。

//Textを取得し、テキストを変更
Text text = GetComponent<Text>();
text.text = "あたらしいテキスト";

//現在のサイズとピッタリのサイズをログで表示(まだピッタリになっていない)
Debug.Log(text.rectTransform.sizeDelta.x + " : " + text.preferredWidth);

f:id:kan_kikuchi:20171106071740j:plain


参考