「Label」も基本的なノードなのでいろいろいじってみた

Node解説

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

シーンに追加した直後の状態がこちらです。

Labelを置いた直後の状態。インスペクターのTextが空欄で、ビューポートには何も表示されていない
Labelを置いた直後。ビューポートには何も表示されていません。

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

Text欄に文章を入力するとこんな感じです。わざと少し長めの文章にしてみました。

Textに長めの文章を入力した直後の状態。Autowrap ModeがOffのため、テキストが折り返されずボックスの外まではみ出している
Textに長めの文章を入力した直後。折り返されずに1行のままボックスの外まではみ出しています。

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

Autowrap ModeをWord (Smart)に変更した直後の状態。同じ文章がボックスの幅に合わせて複数行に折り返されている
Autowrap ModeをWord (Smart)に変更した直後。ボックスの幅に合わせて複数行に折り返されました。

そもそも、一つのLabelでこんな長い文章を書かないようにするのも大事かもしれませんね。とはいえRPGのキャラのセリフによっては、いいところで改行してくれないといけませんし、覚えておきたい設定です。Word(Smart)は、単語の途中で不自然に改行されることがない、区切りの良い位置で行が変わる設定なのですが、日本語だとひらがな文の途中では改行されてしまうようですね。単語ではないので仕方ないところでしょうか。これも覚えておきたいところです。ともかく、長めの文章を扱うときは、Autowrap Modeを確認しておかないと思わぬところではみ出してしまいそうです。ゲームだと興ざめですね。

次はHorizontal AlignmentとVertical Alignmentを試してみました。ここまでの検証はCenter・Centerのままだったので、原点を基準にテキストがどのあたりに配置されるのか確かめるために、両方をLeft・Topに変更してみます。というかこちらがデフォルト設定です。

Horizontal AlignmentとVertical AlignmentをどちらもLeftとTopに変更した状態。テキストが原点を起点に左上詰めで表示されている
Horizontal Alignment・Vertical AlignmentをどちらもLeft・Topに変更した状態。テキストが原点を起点に左上へ寄りました。

Left・Topに変更すると、テキストが原点を起点にして左上に寄って表示されました。Center・Centerのときはボックスの中央にテキストが収まっていたので、AlignmentはLabelのボックス(Control)の中でテキストをどこに寄せるかを決めるパラメータなんだと分かりました。UIの配置を考えるときは、ボックスのサイズとAlignmentの組み合わせで細かく調整できそうです。RPGならLeft/Topを多用するイメージですかね。

今回いちばん気になったのは、テキストがはみ出る長さの時に、勝手にボックスのサイズまで変えてしまうことです。スクリプトでテキスト設定した場合などは、こういうことに気づかないのではないかと思います。で、テストプレイをしてみてたくさんのキャラのセリフでいろいろはみ出る…これは避けたいですね。

Autowrap ModeがデフォルトでOffになっているのも、最初は不親切に感じましたが、ボタンの短いラベルのように意図的に1行で見せたい場面を考えると理にかなっている気もします。ボックスのサイズを画面のレイアウトに合わせて決め打ちするような使い方であれば、勝手に折り返されるより挙動が予測しやすいはずです。ほかにもTheme Overridesでフォントサイズなどを個別に変更できるパラメータがありましたが、実際に画面を作るときにまたあらためて試してみようと思います。長文の時は別のノードのほうが適しているのかもしれませんしね。

関連記事

コメント