ゲームパッドのサポート
Gamepad
(ゲームパッド) は、狭義では、2 つのサムスティック、1 つの D パッド、4 つのフェースボタンを備えた Device として定義されます。さらに、ゲームパッドには通常、2 つのショルダーボタンと 2 つのトリガーボタンも搭載されています。また、ほとんどのゲームパッドには、中央に 2 つのボタンがあります。
ゲームパッドには、ジャイロなど、Device で開放できる追加の Control が搭載されている場合があります。ただし、すべてのゲームパッドに確実に存在するのは、上記の最小セットの Control です。
ゲームパッドのサポートにより、プラットフォームやハードウェアが異なっても、各 Control が正しい位置で適切に機能することが保証されます。例えば、PS4 DualShock コントローラーのレイアウトの外観は、どのプラットフォームでサポートされる場合でも同じです。ゲームパッドの下 (South) フェースボタンは常に、一番下のフェースボタンです。
ノート: 汎用 HID ゲームパッドは、
Gamepad
デバイスとして表されるのでは なく、汎用 ジョイスティック として作成されます。これは、コントローラー上のボタンと軸を Input System で確実に正しくマッピングできないためです (この情報は HID レベルでは利用できません)。ゲームパッドとして表されるのは、Input System で明示的にサポートされる HID ゲームパッド (PS4 コントローラーなど) だけです。ただし、特定の HID ゲームパッドに対して、同様のサポートを手動で設定することはできます ("HID フォールバックのオーバーライド" を参照してください)。ノート: ゲームパッドを使用してマウス入力を動かす必要がある場合のために、
Gamepad Mouse Cursor
というサンプルが用意されており、Package Manager UI から Input System パッケージを選択するとインストールできます。このサンプルは、ゲームパッドの入力を設定して仮想マウスカーソルを動かす方法を示しています。
コントロール
すべてのゲームパッドには、以下の Control が含まれています。
Control | 型 | 説明 |
---|---|---|
leftStick |
StickControl |
ゲームパッドの左側にあるサムスティック。デッドゾーンが適用されます。正規化された 2D モーションベクトルを提供します。X は、左から右へ [-1..1]、Y は、下から上へ [-1..1] です。D パッドのように使用するための上/下/左/右ボタンがあります。 |
rightStick |
StickControl |
ゲームパッドの右側にあるサムスティック。デッドゾーンが適用されます。正規化された 2D モーションベクトルを提供します。X は、左から右へ [-1..1]、Y は、下から上へ [-1..1] です。D パッドのように使用するための上/下/左/右ボタンがあります。 |
dpad |
DpadControl |
ゲームパッド上の D パッド。 |
buttonNorth |
ButtonControl |
通常はゲームパッドの右側にある 4 つのアクションボタンのうち、上にあるボタン。Xbox コントローラーでは "Y"、PlayStation コントローラーでは "△" というラベルが付いています。 |
buttonSouth |
ButtonControl |
通常はゲームパッドの右側にある 4 つのアクションボタンのうち、下にあるボタン。Xbox コントローラーでは "A"、PlayStation コントローラーでは "×" というラベルが付いています。 |
buttonWest |
ButtonControl |
通常はゲームパッドの右側にある 4 つのアクションボタンのうち、左にあるボタン。Xbox コントローラーでは "X"、PlayStation コントローラーでは "□" というラベルが付いています。 |
buttonEast |
ButtonControl |
通常はゲームパッドの右側にある 4 つのアクションボタンのうち、右にあるボタン。Xbox コントローラーでは "B"、PlayStation コントローラーでは "○" というラベルが付いています。 |
leftShoulder |
ButtonControl |
左ショルダーボタン。 |
rightShoulder |
ButtonControl |
右ショルダーボタン。 |
leftTrigger |
ButtonControl |
左トリガーボタン。 |
rightTrigger |
ButtonControl |
右トリガーボタン。 |
startButton |
ButtonControl |
スタートボタン。 |
selectButton |
ButtonControl |
セレクトボタン。 |
leftStickButton |
ButtonControl |
ユーザーが左スティックを下に押したときに押されるボタン。 |
rightStickButton |
ButtonControl |
ユーザーが右スティックを下に押したときに押されるボタン。 |
ノート: ボタンは、完全な浮動小数点軸でもあります。例えば、左トリガーと右トリガーは、ボタンとしても、完全浮動小数点軸としても機能できます。
ゲームパッドのボタンには、Gamepad
のインデクサープロパティと GamepadButton
列挙体を使用してアクセスすることもできます。
Gamepad.current[GamepadButton.LeftShoulder];
ゲームパッドでは、Xbox スタイルと PS4 スタイルの両方の別名 (エイリアス) が各ボタンに定義されています。例えば、以下の 4 つのアクセサーはいずれも、同じ "上" (North) ボタンを取得します。
Gamepad.current[GamepadButton.Y]
Gamepad.current["Y"]
Gamepad.current[GamepadButton.Triangle]
Gamepad.current["Triangle"]
ポーリング
Windows (XInput コントローラーのみ)、ユニバーサル Windows プラットフォーム (UWP)、および Switch では、Unity によって更新がイベントとして伝達されるのではなく、ゲームパッドが明示的にポーリングされます。
ポーリング頻度は手動で制御できます。デフォルトのポーリング頻度は 60 Hz です。頻度の取得または設定を行うには、InputSystem.pollingFrequency
を使用します。
// 120 Hz でゲームパッドをポーリングします。
InputSystem.pollingFrequency = 120;
頻度の値を大きくすると、対応する Device で発生するイベントの数が増加します。イベントに提供されるタイムスタンプは、ポーリング頻度で指定された間隔に大まかに従います。ただし、非同期のバックグラウンドポーリングは OS のスレッドスケジューリングに依存するため、変動する可能性があります。
振動
Gamepad
クラスには、左右のモータースピードを制御できる IDualMotorRumble
インターフェースが実装されています。一般的なほとんどのゲームパッドでは、左モーターで低周波振動が発生し、右モーターで高周波振動が発生します。
// 低周波 (左) モーターを 1/4 のスピードで振動させ、高周波 (右) モーターを
// 3/4 のスピードで振動させます。
Gamepad.current.SetMotorSpeeds(0.25f, 0.75f);
ノート: 現在、振動効果は、以下の Device と OS の組み合わせでのみサポートされます。
- PS4、Xbox、Switch のコンソールに接続されたそれぞれのコントローラー。コンソール固有の入力パッケージがプロジェクトにインストールされている場合にのみサポートされます。
- Mac または Windows/UWP コンピューターに接続された PS4 コントローラー。
- Windows 上の Xbox コントローラー。
触覚効果の一時停止、再開、停止
IDualMotorRumble
は、任意の Device で任意の触覚効果をサポートするための基本インターフェースである IHaptics
に基づいています。触覚フィードバックの一時停止、再開、リセットを行うには、それぞれ、PauseHaptics
、ResumeHaptics
、ResetHaptics
メソッドを使用できます。
状況によっては、すべての Device でグローバルに触覚効果を一時停止するか、停止することが必要になる場合があります。例えば、プレイヤーがゲーム内メニューを開いたときに、プレイヤーがメニューを操作している間は触覚効果を一時停止し、プレイヤーがゲームを再開したら触覚効果を再開することができます。対応する InputSystem
のメソッドを使用すると、目的の結果を達成できます。これらのメソッドは、Device 固有のメソッドと同様に動作しますが、すべての Device に影響する点が異なります。
// 触覚効果をグローバルに一時停止します。
InputSystem.PauseHaptics();
// 触覚効果をグローバルに再開します。
InputSystem.ResumeHaptics();
// 触覚効果をグローバルに停止します。
InputSystem.ResetHaptics();
PauseHaptics
と ResetHaptics
の違いは、後者が、各 Device の触覚効果のプレイバック状態を初期状態にリセットするのに対して、PauseHaptics
は、メモリ内のプレイバック状態を保持し、ハードウェアでのプレイバックだけを停止する点です。
PlayStation コントローラー
PlayStation コントローラーは、さまざまな Device で十分にサポートされています。Input System は、DualShockGamepad
基本クラスから派生する別々の型としてこれらを実装しています。この基本クラスは Gamepad
から派生します。
DualShock3GamepadHID
: HID インターフェースを使用してデスクトップコンピューターに接続された DualShock 3 コントローラー。現在は macOS でのみサポートされます。振動 はサポートされません。DualShock4GamepadHID
: HID インターフェースを使用してデスクトップコンピューターに接続された DualShock 4 コントローラー。macOS、Windows、UWP、および Linux でサポートされます。 *DualSenseGamepadHID
: HID インターフェースを使用してデスクトップコンピューターに接続された DualSense コントローラー。macOS と Windows でサポートされます。DualShock4GampadiOS
: Bluetooth 経由で iOS Device に接続された DualShock 4 コントローラー。iOS 13 以降が必要です。SetLightBarColor(Color)
: コントローラーのライトバーの色を設定するために使用されます。
USB ドライバーやハードウェアの制限により、一度に実行できる IOCTL (入力/出力制御) コマンドは 1 つだけです。DualShock 4 の SetLightBarColor(Color)
および SetMotorSpeeds(Single, Single)
機能は IOCTL コマンドを使用して実装されているため、この一方のメソッドに続いてすぐに他方が呼び出されると、多くの場合、正常に完了するのは最初のコマンドのみです。他方のコマンドは破棄されます。ライトバーの色と振動モーターのスピードの両方を同時に設定する必要がある場合は、SetMotorSpeedsAndLightBarColor(Single, Single, Color)
メソッドを使用します。
ノート:
Xbox コントローラー
Xbox コントローラーは、さまさまな Device で十分にサポートされています。Input System は、Gamepad
から派生する XInputController
クラスを使用して、これらを実装しています。Windows および UWP では、サポートされているあらゆるタイプの XInput コントローラーに接続するために XInput API が使用されます。これには、Xbox One または Xbox 360 の互換コントローラーもすべて含まれます。これらのコントローラーは XInputController
インスタンスとして表されます。XInputController.subType
プロパティを照会すると、コントローラーのタイプ (ホイールやゲームパッドなど) に関する情報を取得できます。
その他のプラットフォームでは、以下の派生クラスを使用して Xbox コントローラーが表現されます。
XboxGamepadMacOS
: macOS 用 Xbox コントローラードライバー を使用して USB 経由で Mac に接続された任意の Xbox ゲームパッドまたは互換ゲームパッド。XboxOneGampadMacOSWireless
: Bluetooth 経由で Mac に接続された Xbox One コントローラー。Bluetooth をサポートしている Xbox One コントローラーは最新世代だけです。このシナリオでは、これらのコントローラーに追加ドライバーは必要ありません。XboxOneGampadiOS
: Bluetooth 経由で iOS Device に接続された Xbox One コントローラー。iOS 13 以降が必要です。
ノート:
- 現在、Mac で XInput コントローラーを使用するには、macOS 用 Xbox コントローラードライバー のインストールが必要です。このドライバーでは USB 接続のみがサポートされ、ワイヤレスドングルはサポートされません。ただし、最新世代の Xbox One コントローラーでは Bluetooth がネイティブでサポートされています。これらのコントローラーは、Bluetooth 経由で接続すると、Mac で HID としてネイティブでサポートされます。追加ドライバーは必要ありません。
- Unity では、ブラウザーと OS の設定に応じて WebGL 上で Xbox コントローラーがサポートされます。ただし、この場合のコントローラーは、基本的な
Gamepad
またはJoystick
Device として扱われ、振動効果やその他の Xbox 固有の機能はサポートされません。
Switch コントローラー
Input System は、基本的なゲームパッド機能を実装する SwitchProControllerHID
クラスを介してデスクトップコンピューターで Switch Pro コントローラーをサポートします。
ノート: このサポートは現在、有線 USB 経由で接続された Switch Pro コントローラーでは機能しません。Switch Pro コントローラーは Bluetooth 経由で接続する 必要があります。このコントローラーでは、HID に加えて、独自の仕様の通信プロトコルが使用されており、コントローラーを他の HID と同様に扱うことができないためです。
ノート: 現在、Switch Joy-Con はデスクトップではサポートされていません。
カーソル制御
ゲームパッドやジョイスティックで、ハードウェアカーソルまたはソフトウェアカーソルを制御できるようにするには、VirtualMouseInput
コンポーネントを使用します。UI に関するマニュアルセクションで、VirtualMouseInput
コンポーネント の説明を参照してください。