UniyのTextクラスには preferredWidth と preferredHeight が用意されていて、テキストの内容に合わせたサイズを取得できる。
これを利用してカード化したり出来るが、preferredHeight が正しく取得できないことがあった。
この現象に関するメモ。
おかしくなった状況として、スクリプトでテキストを入力してテキストサイズに合わせてオブジェクトサイズを決めていた。
1 2 3 4 5 6 7 8 |
... GameObject g = Instantiate( Resources.Load("card" ,typeof(GameObject)) as GameObject); Text text = g.transform.Find("Text").gameObject.GetComponent<Text>(); text.text = inputText.text; text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight); g.GetComponent<RectTransform>().sizeDelta = text.rectTransform.sizeDelta; ... |
すると、文字の長さによって横方法はいいけど高さがおかしな挙動を見せた。
色々試してみると、どうも元のテキストのWidthが短くて Horizontal Overflow が Wrap になっていると起きるようだった。
ようするに改行込みの高さが返されている。
今回の場合は横方向も延びて改行の必要性がなくなっているため挙動不審に見えた。
対策としては改行させなきゃ良いのでこんな感じで。
- テキストの Width を十分にとる
- テキストの Horizontal Overflow を Overflow にする
- スクリプトのサイズ変更を2行連続で行う
1 2 |
text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight);//横だけOK text.rectTransform.sizeDelta = new Vector2(text.preferredWidth, text.preferredHeight);//どっちもOK |