【Unity】uGUIでテキストボックスを文字のサイズに合わせる方法

ugui-text-size-adjust

テキストを作成した時に、テキストボックスがぴったりテキストに合わさってほしい時が個人的にあります。

その解決方法。

テキストボックスのとテキストのサイズの状態

f:id:min0124:20171123103010p:plain

あとでエリアを指定するにしても、一度最小の大きさにして、位置を調整したい事があったり

f:id:min0124:20171123103237p:plain

ContentSizeFitterを使用する場合

  • テキストにContentSizeFitterのコンポーネントをアタッチ

  • Horizontal FitとVertical FitをPreferred Sizeにするとテキストボックスが文字のサイズに合わさる

f:id:min0124:20171123105347p:plain

参考

[Unity] Textコンポーネントでテキストを切り捨てずに全文表示させる方法 - Qiita

スクリプトを使用する場合①

ContentSizeFitterだと設定変更する手間がかるのと自動更新できないので、下記のスクリプトを使用してみました。

f:id:min0124:20171123105859p:plain

【Unity】【UI】テキストのサイズ調整を行うコンポーネントです · GitHub

少し調整

コンポーネントをつけた瞬間に、テキストボックスが文字のサイズに合わさり、文字を変更しても自動更新するようにしてみました。

  • 12行目の順番を変更 public enum AdjustMode { HeightAndWidth, Height, Width, None }

  • 31行目にAlwaysUpdate=true;

  • 49行目あたりのif文をコメントアウト

//        if ((Mode == AdjustMode.Width || Mode == AdjustMode.HeightAndWidth) && text.horizontalOverflow != HorizontalWrapMode.Overflow)
//        {
//            text.horizontalOverflow = HorizontalWrapMode.Overflow;
//        }

スクリプトを使用する場合②

上記のスクリプトを参考に要素を削ってみたもの。

ExecuteInEditModeとはスクリプトをEdit モードで実行できるようになるモードのこと

using UnityEngine;
using UnityEngine.UI;

[ExecuteInEditMode]

public class TextSizeAdjust : MonoBehaviour {

    void Update()
    {
        Adjust();
    }
        
    public void Adjust()
    {
        Text text = GetComponent<Text>();

        text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight);

        text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight);      
    }
}

まとめ

あくまで補助的なスクリプトなのであしからず。