関連ブログ
- [UE5] 元の位置に戻るカメラの実装 2024.12.18UE
- [UE5]難易度変更に対応したシューティングゲームを作ってみよう 2024.12.11UE
- [UE5] インタラクト可能なモノの量産に役立つBPを作ってみよう 2024.12.04UE
CATEGORY
2023.09.27UE5UE/ 初心者向けUE/ BlueprintUE/ UMG
執筆バージョン: Unreal Engine 5.2.1 |
こんにちは!
今回はTextBoxに標準搭載されている【Wrapping】設定に関して詳しくご紹介します。
UTextBlockに標準で搭載されている【テキストをスペース区切りでいい感じに改行してくれる】設定です。
(上記ドキュメントはRichTextBlockのものですが、Wrapping項目に関しては標準のTextBlockのものと同様です)
ご紹介に入る前に、お忙しい方向けに軽く各項目の説明です。
● AutoWrapText:TextBlockのサイズを超えた時点でラッピング(自動改行)が行われます
● WrapTextAt:指定したサイズを超えた時点でラッピングが行われます
● WrappingPolicy:空白が無くてラッピングできないとき、どのような対応を行うかの設定です
○ DefaultWrapping:特に対応は行いません
○ AllowPerCharacterWrapping:単語の途中でラッピングが行われます
では詳しく説明していきます!
TextBlockのサイズを超えた時点でラッピングが行われます。
TextBlockを子ウィジェットとして他のウィジェットに格納すれば、親ウィジェットのサイズで範囲が変化するようになるので汎用性が高い設定です。
注意点として、サイズを明示的に決めておかないとラッピングされません。TextBlock単独で使用する際にはCanvasPanelやSizeBox以下に配置してサイズを指定する必要があります。
上の動画だと、CanvasPanel以下に配置してSizeXを調整することで改行する位置を変えています。
指定したサイズを超えた時点でラッピングが行われます。値が0または-(マイナス)値だと行われません。
TextBlock本体の大きさは見ない且つ、どの地点で改行されるのかは表示されません。
AutoWrapTextと違い、親ウィジェットのサイズにも依存しないので汎用性は低くなりますが、一括でラッピング範囲を固定させたいときには便利です。
Blueprint側にはSetAutoWrapText関数、各オプション値の取得のみが公開されています。
WrapTextAt / WrappingPolicy に関してはBlueprint上ではSetが行えません。
ですので、ラッピング範囲を動的に変更する方法としては以下のものが挙げられます。
● AutoWrapTextを使用してTectBlock(もしくはその親ウィジェット)のサイズを変更する
● TextBlockをCommonUIPluginのCommonTextBlockに切り替え、SetWrapTextWidth関数を使用する
CommonUIPluginに関してはこちらをご覧ください
SetAutoWrapとWrapTextAtを同時併用した場合、優先される範囲は値が小さい方になります。
例えば、TextBlockのSizeX=200, WrapTextAt=300だった場合、改行範囲はSizeX=200が適用されます。
こちらを利用して、WrapTextAtで表示領域の最大値を決めておいて細かなサイズ調整は各画面・各親ウィジェットに任せる、などの処理が組めそうですね。
注意点
4.21時点でAutoWrapText と WrapTextAt を同時に使用していたとき、ランタイム中にSetTextを行うとWrapTextAtが効かなくなる、という不具合が見つかっています。
このブログを書いている5.2.1では再現されませんでしたが、UE4で使用するという方はご留意ください。
空白が無くて改行できないとき、どのような対応を行うかの設定です。
Wrappingはスペースをひとつの区切りとしています。では、文章にスペースが無い場合はどうでしょうか?
こうなっちゃいます……
そんな時はWrappingPolicyをAllowPerCharacterWrapping に変更して、文字ごとのラッピングを許可してみましょう。
うまくいきましたね!
これでご紹介は終了となります。
是非活用していただけると嬉しいです!