今回はLabelを触ってみることにしました。文字を表示するノードなので使い方は想像しやすいのですが、これまで触ってきたNode2D系のノードとは継承元が違う(Controlというクラスを継承している)ので、あえて他のノードの子にはせず単体で置いてみることにしました。
シーンに追加した直後の状態がこちらです。

てっきり何らかの文字がデフォルトで表示されているのかと思っていたのですが、実際には何も入っていません。Godotを触る時は大体デフォルトでは何も入っていないことがあるので慣れが必要ですね。インスペクターのTextプロパティを見ると空欄になっていて、ここに文字を書き込まない限り何も表示されないんですね。
Text欄に文章を入力するとこんな感じです。わざと少し長めの文章にしてみました。

すると、テキストが折り返されずに1行のまま右へどんどん伸びていって、ボックスも設定より勝手に大きくなってしまうし、ゲームエリアの外まではみ出してしまいました。この辺の対策はインスペクターを見るとAutowrap ModeをOn(試しにWord (Smart))に変更することで枠内で改行されるようになりました。

そもそも、一つのLabelでこんな長い文章を書かないようにするのも大事かもしれませんね。とはいえRPGのキャラのセリフによっては、いいところで改行してくれないといけませんし、覚えておきたい設定です。Word(Smart)は、単語の途中で不自然に改行されることがない、区切りの良い位置で行が変わる設定なのですが、日本語だとひらがな文の途中では改行されてしまうようですね。単語ではないので仕方ないところでしょうか。これも覚えておきたいところです。ともかく、長めの文章を扱うときは、Autowrap Modeを確認しておかないと思わぬところではみ出してしまいそうです。ゲームだと興ざめですね。
次はHorizontal AlignmentとVertical Alignmentを試してみました。ここまでの検証はCenter・Centerのままだったので、原点を基準にテキストがどのあたりに配置されるのか確かめるために、両方をLeft・Topに変更してみます。というかこちらがデフォルト設定です。

Left・Topに変更すると、テキストが原点を起点にして左上に寄って表示されました。Center・Centerのときはボックスの中央にテキストが収まっていたので、AlignmentはLabelのボックス(Control)の中でテキストをどこに寄せるかを決めるパラメータなんだと分かりました。UIの配置を考えるときは、ボックスのサイズとAlignmentの組み合わせで細かく調整できそうです。RPGならLeft/Topを多用するイメージですかね。
今回いちばん気になったのは、テキストがはみ出る長さの時に、勝手にボックスのサイズまで変えてしまうことです。スクリプトでテキスト設定した場合などは、こういうことに気づかないのではないかと思います。で、テストプレイをしてみてたくさんのキャラのセリフでいろいろはみ出る…これは避けたいですね。
Autowrap ModeがデフォルトでOffになっているのも、最初は不親切に感じましたが、ボタンの短いラベルのように意図的に1行で見せたい場面を考えると理にかなっている気もします。ボックスのサイズを画面のレイアウトに合わせて決め打ちするような使い方であれば、勝手に折り返されるより挙動が予測しやすいはずです。ほかにもTheme Overridesでフォントサイズなどを個別に変更できるパラメータがありましたが、実際に画面を作るときにまたあらためて試してみようと思います。長文の時は別のノードのほうが適しているのかもしれませんしね。



コメント