# バーチャルボタン説明

**URL:** <https://guild.rpgmakerofficial.com/t/topic/1031>\
**Category:** 一般\
**Created:** [2025 年 12 月 9 日午前 6:52 UTC](https://guild.rpgmakerofficial.com/t/topic/1031 "2025-12-09T06:52:29Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Shirokishi](https://avatars.discourse-cdn.com/v4/letter/s/df788c/32.png) [@Shirokishi](https://guild.rpgmakerofficial.com/u/Shirokishi)\
**Post date:** [2025 年 12 月 9 日午前 6:52 UTC](https://guild.rpgmakerofficial.com/t/topic/1031/1 "2025-12-09T06:52:29Z")

</div>

[virtual\_button.gd](https://guild.rpgmakerofficial.com/uploads/short-url/6x7Uja9Kw0uthOvx2ned4vsry6z.gd) (18.5 KB)  
※2026/6/4更新。  
拡大縮小により、座標がズレないように修正しました。

[ボタン画像サンプル.zip](https://guild.rpgmakerofficial.com/uploads/short-url/pnMPu9lr5JSvAxdwJoiFtaD9eAf.zip) (2.5 KB)

VirtualButton は Node2D に付けるスクリプトで、画面上の見た目用ノードをタップまたはクリックしたときに、指定した InputMap のアクションを押したことにするためのものです。  
GameObject側では入力リンク や シグナルで検知できます。

一番小さい構成の手順  
一例として jump というアクションのジャンプボタンを作る場合を書きます。

1. プロジェクト設定の Input Map を開いて、jump というアクション名を追加します。

2. シーンに VirtualButton ノードを一つ置きます。  
Node2D を追加して VirtualButton.gd をアタッチするか、シーン→＋ボタンから 直接 VirtualButton を作成します。

3. 当たり判定と見た目を用意します。  
VirtualButton ノードを選択し、インスペクタの\*\*≪参照ノード内≫\*\* にある「デフォルト子ノードを生成して割り当て」というボタンを押してください。  
（※ボタンが動作しない場合プロジェクトを保存後開き直してしてください）  
これで  
hitbox\_control に ButtonArea という Control ノード  
visual\_node に ButtonTexture という TextureRect ノード  
が自動で割り当てられます。  
以後、画面上で ButtonArea の範囲がクリックやタップの判定に使われ、ButtonTexture がボタンの見た目になります。

4. VirtualButton ノードの input\_action\_name に jump と入力します。  
これでこのボタンは押されたときに jump という InputMap のアクションを押したことになります。

5. Visual 用のテクスチャを設定します。  
VirtualButton ノードの texture\_state\_normal に通常時に表示したいテクスチャを割り当ててください。  
押している間で見た目を変えたい場合は texture\_state\_pressed に別のテクスチャを割り当てます。  
無効状態の見た目を変えたい場合は texture\_state\_disabled に割り当てますが、使わないなら空のままでも構いません。  
enable\_texture\_swap が true のままであれば、押下状態と is\_button\_enabled に応じて自動で切り替わります。  

6. 動かしたい対象オブジェクトの.vsで設定をします。  
ここまで設定すると、ButtonArea の範囲をマウス左クリックまたはタッチすると、jump アクションが押されたことになります。

応用：シグナルを使うかどうか  
シグナルを使う場合はgeneric\_signalを対象GameObjectのreceive\_signalに接続してください。  
InputMap だけで足りる場合はシグナル設定は不要です。
