みつまめ杏仁

アンリアルエンジン(UE4)でGUIを作るためにゴニョゴニョしてます。UIデザイナーの皆様の助けになれば幸いです。

UMGのテキストブロックのサイズを動的に取得する方法

Widgetで、あるテキストを表示するとして、さらにローカライズすることが分かっているとき。どのように作りますか?

翻訳されたテキストを見て、一番長そうなドイツ語やロシア語なんかに合わせて

固定サイズで作ると、ちょっと短い言語の時にカッコ悪いことになります。

下図は英語とフランス語を並べてみたものです。

f:id:hiyokosabrey:20160525231454p:plain

で、中の文字量に合わせたサイズを取得して調整すれば、

f:id:hiyokosabrey:20160525231633p:plain

変なスキマのないサイズに合わせたレイアウトができるはずです。

 

予めUMGで適当な大きさのテキストブロックを配置しておいて、適当なタイミングで文字列を渡してその表示サイズを取得するとき、Get Desired Size ノードを使います。

f:id:hiyokosabrey:20160525224057p:plain

"Desired size" は 要求されたサイズということなので表示しようとしている大きさということだと思います。キャンバスパネルやテキストブロックには Size to Content というフラグ設定があります。これを付けておくと内容に合わせてバウンディングBOXが変形します。このサイズを取得して複数のパーツをイイ感じの距離に配置することができます。

f:id:hiyokosabrey:20160525224439p:plain

ですが、あと一つ重要なノードがあります。それが Force Layout Prepass ノードです。

f:id:hiyokosabrey:20160525232346p:plain

docs.unrealengine.com

日本語のドキュメントが無いようなので詳しくは解ってないのですが、このノードを使うことで、実際に描画パスを進めなくても Get Desired Size ノードがサイズを取得できるようになります。実際につなげてみるとこんな感じ。

f:id:hiyokosabrey:20160525233113p:plain

あちこちで使いたかったのでマクロにしてみました。

 あとはこの数値を使って位置調整すればOKです。

 

 

ここまではよかったんですが、もう少し複雑なものを作ろうとしたら、この連携がうまく働いてくれませんでした。次回はこの対策方法を書こうと思います。

ではでは