Table of Contents

ゲームパッド

初級 プログラマー

ゲームパッド (Xbox Elite ワイヤレス コントローラー、PS4 DualShock など) は、コンソールおよびデスクトップ用の一般的な入力デバイスです。

Note

現在、Stride は Xbox Elite ゲームパッド用に最適化されています。他のコントローラーも動作しますが、予期しないボタン マッピングになる場合があります。PS4 DualShock タッチパッドなどのゲームパッド固有の機能はサポートされません。

デジタル ボタンとアナログ ボタン

  • デジタル ボタンには、アップとダウンの 2 つの状態があります。D パッド、スタート、バック、サムスティック (押す)、A、B、X、Y の各ボタンはデジタル ボタンです。

  • アナログ ボタンは、ユーザーが押した強さに応じた値を返します。トリガーはアナログ ボタンであり、0 ~ 1 の範囲の値を返します。サムスティックはアナログ ボタンでもあり、X 軸および Y 軸の -1 ~ 1 の値を返します。

Xbox Elite コントローラーのボタンは、Stride では次のような名前になっています。

Xbox gamepad

ゲームパッドの入力を処理する

ゲームパッドが接続されていることを確認する

ゲームパッドの入力を処理する前に:

  • いずれかのゲームパッドが接続されているかどうかを確認するには、InputManager.HasGamePad を使用します。

  • 接続されているゲームパッドの数を確認するには、InputManager.GamePadCount を使用します。

  • 現在のデバイスが切断されたかどうかを確認するには、InputManager.DeviceRemoved イベントを使用します。

  • デバイスが接続されたかどうかを確認するには、InputManager.DeviceAdded イベントを使用します。

デジタル ボタン

ゲームパッドのデジタル ボタンの状態および状態変化を問い合わせるには、GamePad オブジェクトで以下のメソッドを使用します。

メソッド 機能
IsButtonDown(IGamePadDevice, GamePadButton) ボタンが「押されている」状態かどうかを確認します。
IsButtonPressed(IGamePadDevice, GamePadButton) 前回の更新以降にユーザーがボタンを「押した」かどうかを確認します。
IsButtonReleased(IGamePadDevice, GamePadButton) 前回の更新以降にユーザーがボタンを「放した」かどうかを確認します。

ボタン (GamePadButton) は確認するゲームパッド ボタンです。

デジタル ボタンの状態は、GamePadState.Buttons を使用して取得することもできます。

Note

GamePadState.Buttons フィールドは、2 進法を使用するビットマスクです。ビットマスクの値に応じて、どのボタンがアップかダウンかを特定できます。

ゲームパッドの状態を取得するには、IGamePadDevice.State を使用します。

アナログ ボタン

アナログ ボタンの値を問い合わせるには、最初に GetGamePadByIndex(index) を使用してゲームパッドの現在の状態を取得します。index (整数) は、確認するゲームパッドのインデックスです。

Warning

IGamePadDevice.State によって返される値は、現在の更新でのゲームパッドの状態です。この値を次の更新に再使用することはできません。更新のたびに、再度問い合わせる必要があります。

トリガーとサムスティックの位置を取得するには、 GamePadState のフィールドを使用します。

フィールド 説明
GamePadState.LeftThumb 左サムスティックの X 軸/Y 軸の値です。どちらの軸も範囲は[-1.0f, 1.0f]です。
GamePadState.RightThumb 右サムスティックの X 軸/Y 軸の値です。どちらの軸も範囲は[-1.0f, 1.0f]です。
GamePadState.LeftTrigger 左トリガー アナログ コントロールの値です。1 つの軸の範囲は[0, 1.0f]です。
GamePadState.RightTrigger 右トリガー アナログ コントロールの値です。1 つの軸の範囲は[0, 1.0f]です。

サムスティックは、X 軸および Y 軸の方向に動きます。その位置は次のように表されます。

Query thumb position Query thumb position

トリガーは X 軸の方向に動きます。その位置は次のように表されます。

Query trigger position

振動

ゲームパッドの振動レベルを設定するには、IGamePadDevice.SetVibration を使用します。

Note

現在、Stride は Xbox ゲームパッドの振動のみをサポートします。

コード例

using Stride.Core.Mathematics;
using Stride.Engine;

public class TestScript : SyncScript
{
    public override void Update()
    {
        // ゲームパッドが接続されているかどうかを確認する
        if (Input.HasGamePad)
        {
            // 接続されているゲームパッドの数を取得する
            int gamepadCount = Input.GamePadCount;

            // ゲームパッドのステータスを確認する
            foreach(var gamepad in Input.GamePads)
            {
                // アナログ サムスティックの位置を取得する
                Vector2 speed = gamepad.State.LeftThumb;
                Vector2 direction = gamepad.State.RightThumb;

                // デジタル ボタンのステータスを取得する
                if (gamepad.IsButtonDown(GamePadButton.X))
                {
                    // ユーザーがボタンを押し続けている限り、アクションを繰り返す。
                    // これは、マシンガンの連射のような連続するアクションに利用できる。
                }
                if (gamepad.IsButtonPressed(GamePadButton.A))
                {
                    // ユーザーがボタンを押し続けている場合であっても、アクションを 1 回だけトリガーする。
                    // これは、ジャンプのような 1 回限りのアクションに利用できる。
                }
            }
        }
    }
}

関連項目