virtualpad_agm.zip (9.6 KB)
VirtualJoystick は、タッチやマウスの位置から「軸ベクトル」「角度」「距離」を計算し、設定に応じて InputMap にアクションを送ります。
主な性質は次の通りです。
- 現在の入力ベクトルを保持します
get_axis()で現在の軸を取得できます(右が正の X、上が負の Y)get_input_strength()でベクトルの長さ(0.0〜1.0)を取得できますget_input_angle_deg()で角度(度数法。0 度が右、90 度が上)を取得できます
- 角度と距離帯でアクションを決めます
- VirtualJoystickAngleConfig に「どの角度範囲を担当するか」を設定します
- その中の VirtualJoystickDistanceBand で「距離の範囲とアクション名」を設定します
- 入力の角度と距離がバンドに入った場合、そのバンドのアクションが InputMap に送られます
- AGM サフィックスを自動付与します
- シグナルで任意の通知も行えます
AGMのゲームオブジェクトにシグナルを送信するときはgeneric_signal(signal_name: String, value: Variant)を対象オブジェクトのreceive_signalに接続してください。
2. 最小構成での使い方
最小限の設定で四方向一段階のバーチャルパッドとして使う手順です。
2-1. VirtualJoystick ノードをシーンに用意する
- シーンツリーで VirtualJoystick を直接追加する
or
Node2D を追加し、そのスクリプトにvirtual_joystick.gdをアタッチする
2-2. 子ノードの自動生成ボタンを押す
VirtualJoystick ノードを選択すると、インスペクタに
「デフォルト子ノードを生成して割り当て」のボタンがあります。
(ボタンが表示されない場合やボタンを押してもうまく生成されない場合はプロジェクトを保存し再起動してください)
- このボタンを一度押します
- 次のノードが自動的に作成されます
-
area_control_node
画面全体などを覆う Control。タッチの有効範囲として使われます。
これが空になっている場合は画面全体がバーチャルパッドのタッチ範囲となります。
バーチャルパッドが反応しない場合はこの設定を見直してください。 -
base_texture_rect_node
ベース画像用の TextureRect -
knob_texture_rect_node
つまみ画像用の TextureRect
必要であれば、別途用意した TextureRect を overlay_texture_rect_node に割り当ててください。
2-3. InputMap にアクションを登録する
- InputMap 側
InputMapにバーチャルパッドで使用したいキーを登録しておきます。
2-4. 角度アクションの自動生成
- VirtualJoystick の
use_angle_actionsを true にしておきます - インスペクタの「4方向の角度アクションを自動生成」ボタンを押します
- angle_actions に四つの VirtualJoystickAngleConfig が追加されます
- Right
角度範囲 -45 〜 45 度 - Up
角度範囲 45 〜 135 度 - Left
角度範囲 135 〜 -135 度(360 度ラップを含む) - Down
角度範囲 -135 〜 -45 度
それぞれの angle_config 内には bands がひとつだけ存在し、
初期状態では「どの角度でも距離帯は 0〜1 でひとつだけ」という形になっています。
2-5. 距離帯にアクション名を書く
- Right の VirtualJoystickAngleConfig を開きます
- 中の
bands[0](VirtualJoystickDistanceBand)を選びます action_nameに発火させたいInputMapのキー名を入れます
2-6. dead_zone と max_distance の調整
- dead_zone
- 軸の長さがこの値未満のとき、軸をゼロとして扱います
- 少し動かした程度では反応させたくない場合は 0.15〜0.2 程度にすると扱いやすくなります
- max_distance
- つまみが移動できる最大距離をピクセル単位で指定します
- ベース画像の半径に合わせて調整してください
2-7. 実行して確認する
- プレイモードで area_control_node の範囲をタッチ、またはマウスでドラッグします
- ベースとつまみが動き、入力角度と距離に応じて設定した距離帯が有効になります