ゲームパッドとアクションの登録

入力機能についてで解説している通り、Godot Engineではアクションに対して複数の入力を登録することができます。
これにより、コードからはキーボードとゲームパッドの操作を、どちらも同じアクションで参照することができます。

このページでは、ゲームパッドに関連する操作やコードを解説していきます。

ゲームパッドの状態取得

ゲームパッドが認識されているか取得

ゲームパッドがシステムに認識されているかどうかを判別します。

if is_joy_known(0):
    print("デバイス0のゲームパッドが正常に認識されています。")

システムが認識している状態であれば、グローバルスコープのJoystickListに定義されたゲームパッドの入力の値を正常に取得できます。

切断・接続の状態を取得する

ゲームパッドの接続状態が変わったことを通知するシグナルがあります。

func _ready():
    Input.joy_connection_changed.connect(_on_joy_connection_changed)

func _on_joy_connection_changed(device:int, connected:bool):
    if not connected:
        print("デバイス%sのゲームパッドが切断されました" % str(device))
    elif connected:
        print("デバイス%sのゲームパッドが接続されました" % str(device))

ゲームパッドの入力取得

スティックの傾きを取得

各アクションにゲームパッドの左スティックの上下左右方向をmove_right, move_left, move_up, move_downとして定義し、以下のようにアクションから方向を取得します。

var value :Vector2 = Input.get_vector("move_right", "move_left", "move_up", "move_down")

print(str(value)) # [-1.0, -1.0] ~ [0, 0] ~ [1.0, 1.0]

ボタン入力を取得

通常はis_action_pressed()などを使用してアクションでの入力判定を行うことがほとんどですが、ゲームパッドのボタン入力を個別に取得したい場合は以下のように取得できます。

if Input.is_joy_button_pressed(0, JOY_DS_A):
    print("Nintendo規格のAボタンに値するボタンが押されている")

グローバルスコープのJoystickListに定義されたゲームパッドの入力の値を第2引数に指定します。

ジャイロスコープセンサーの取得

ゲームパッドへの命令

バイブレーションの設定

start_joy_vibration(デバイス, 弱振動値, 強振動値, 振動時間)で設定します。
ゲームパッドのバイブレーションは2個のモーターがあり、それぞれのモーターの強さを0-1の値で設定することができます。
これらの振動値を動的に変更する場合はstart_joy_vibration()メソッドを変化の回数分実行することで実装可能です。

振動時間0を設定することで、無限に振動しようとします。
すべてのデバイスが長時間振動できるわけではありませんので、長時間振動させたい場合は、繰り返し実行します。

# バイブレーションフラグ
var is_vibrate:bool = true

func _process(_delta):
    if get_joy_vibration_duration(0) =< 0 and is_vibrate:
        Input.start_joy_vibration(0, 0.4, 0.2) # バイブレーション開始
    elif get_joy_vibration_duration(0) > 1000.0:
        is_vibrate = false
        Input.stop_joy_vibration(0) # バイブレーションを止める