今回はタブメニューのUIを作成する方法について説明します。
目次
タブメニューの作り方
メインシーンの作成
プロジェクトを作成して、Mainシーン (Node2D) を作成します。
TabContainer ノードを作成する
続けて Mainノードの下に TabContainer ノードを追加します。
それと TabContainer のサイズが小さいので少し広げておきます。
VBoxContainer ノードの追加
TabContainer の下に VBoxContainer ノードを追加します。これは縦方向に自動でノードを並べてくれるコンテナです。
TabContainer の下にコンテナが追加されたことで、それがタブ名となりました。
TabContainer はこのようにノード名をそのままタブ名とする仕組みとなっているようです。
ちなみに Godot Engine のシーンビュー上では直接日本語をノード名にすることはできないため、テキストエディタなどからコピーして貼り付けることで、日本語ノード名を指定することができます。
VBoxContainer の下に Buttonノードを追加
VBoxContainer ノードの下に Buttonノードを追加します。
インスペクタから Text に「銅の剣」と入れておきます。
このようになりました。
続けて Buttonノードを右クリック > 複製 (Ctrl+D / Cmd+D) で5つほど増やしておきます。
Textの文字は以下のようにしましたが、どんな文字でもOKです。
TabContainerの下にVBoxContainerを追加
TabContainerの下にVBoxContainerを追加します。すると以下のように新しいタブが追加されました。
ノード名はテキストエディタで入力した文字をコピーすると、日本語名に変更できます。
なおタブの切り替えですが、エディタ上では TabContainer のインスペクタの「Current Tab」の値を切り替えることで確認できます。
では、Buttonノードを追加して、Text に文字を設定してきます。
TabContainer に VBoxContainerを追加する
3つくらいタブがあったほうが良いような気がしたので、もう1つ追加していきます。
ノード名は「杖」にしておきました。
さらに Button ノードを追加します。
ボタンにSignalを設定する
最後にそれぞれの Button に Signal を設定します。手動で設定するのは大変なのでスクリプトから設定します。
Mainノードを選択してスクリプトをアタッチします。
Main.gd スクリプトには以下のように記述します。
extends Node2D
## TabContainer.
@onready var _container = $TabContainer
## 開始.
func _ready() -> void:
# macOS版はなぜか画面が小さいのでリサイズする.
#DisplayServer.window_set_size(Vector2i(1152*2, 648*2))
for vbox in _container.get_children():
for button in vbox.get_children():
# buttonのpressedシグナルの呼び出し関数に _on_button_pressedを設定する
# 引数はボタンのテキスト名とする.
button.connect("pressed", _on_button_pressed.bind(button.text))
## ボタン押したときのシグナル.
func _on_button_pressed(name:String) -> void:
print("%s を押しました"%name)
macOS版の場合は、現状(2023/3/20現在)のGodot 4ではなぜか画面が4分の1のサイズとなるので、リサイズ処理を入れました。(さらにプロジェクト設定から自動スケールを有効にしています)
では実行して、クリックしたボタンに対応する文字が「出力ウィンドウ」に表示されることを確認します。
プロジェクトファイル
今回作成したプロジェクトファイルを添付しておきます。
参考
Godot 4での connect() の書き方は以下の記事を参考にしました。