virtual_button.gd (17.8 KB)
ボタン画像サンプル.zip (2.5 KB)
VirtualButton は Node2D に付けるスクリプトで、画面上の見た目用ノードをタップまたはクリックしたときに、指定した InputMap のアクションを押したことにするためのものです。
GameObject側では入力リンク や シグナルで検知できます。
一番小さい構成の手順
一例として jump というアクションのジャンプボタンを作る場合を書きます。
-
プロジェクト設定の Input Map を開いて、jump というアクション名を追加します。
-
シーンに VirtualButton ノードを一つ置きます。
Node2D を追加して VirtualButton.gd をアタッチするか、シーン→+ボタンから 直接 VirtualButton を作成します。 -
当たり判定と見た目を用意します。
VirtualButton ノードを選択し、インスペクタの≪参照ノード内≫ にある「デフォルト子ノードを生成して割り当て」というボタンを押してください。
(※ボタンが動作しない場合プロジェクトを保存後開き直してしてください)
これで
hitbox_control に ButtonArea という Control ノード
visual_node に ButtonTexture という TextureRect ノード
が自動で割り当てられます。
以後、画面上で ButtonArea の範囲がクリックやタップの判定に使われ、ButtonTexture がボタンの見た目になります。 -
VirtualButton ノードの input_action_name に jump と入力します。
これでこのボタンは押されたときに jump という InputMap のアクションを押したことになります。 -
Visual 用のテクスチャを設定します。
VirtualButton ノードの texture_state_normal に通常時に表示したいテクスチャを割り当ててください。
押している間で見た目を変えたい場合は texture_state_pressed に別のテクスチャを割り当てます。
無効状態の見た目を変えたい場合は texture_state_disabled に割り当てますが、使わないなら空のままでも構いません。
enable_texture_swap が true のままであれば、押下状態と is_button_enabled に応じて自動で切り替わります。
-
動かしたい対象オブジェクトの.vsで設定をします。
ここまで設定すると、ButtonArea の範囲をマウス左クリックまたはタッチすると、jump アクションが押されたことになります。
応用:シグナルを使うかどうか
シグナルを使う場合はgeneric_signalを対象GameObjectのreceive_signalに接続してください。
InputMap だけで足りる場合はシグナル設定は不要です。
