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 回限りのアクションに利用できる。
                }
            }
        }
    }
}

関連項目