Steamworks ドキュメンテーション
一般概念

Steam入力

「Steam入力」とは、Steamがゲームとのインターフェイスに使用する、ソフトウェア、ハードウェア、および設定ユーティリティ全体を指す包括的な用語です。

Steam入力コンフィギュレータ

Steam入力コンフィギュレータ(SIC)は、Steamクライアントに組み込まれており、プレイヤーとゲーム/アプリケーションの間に位置します。 SICは入力デバイスからの入力を受け取り、プレイヤーの設定に応じて、そのデータを適切に変換してからゲームにデータを渡します。

SICは主に、レガシーおよびネイティブモードの2つのモードで使用できます。

レガシーモード

レガシーモードは、Steam入力APIを実装していないゲーム用の互換モードです。 この場合、SICはSteam上のすべてのプレイヤーが、すべてのゲームにおいて使用可能な多機能な入力マッパーとして機能します。

プレイヤーは、「A」ボタンをキーボードの「Enter」キーに、左のアナログトリガーのフルプルをマウスのクリックにシミュレートする等、物理的入力を他の物理的入力に再割り当てできます。 このモードは、Steamコントローラだけでなく、サポートされているすべての入力デバイスで機能します。

レガシーモードは、APIをサポートしていないゲームに最適ですが、いくつか制限があります。 たとえば、プログラム上、ゲームパッドとマウスコントロールの同時使用を想定していないゲームで、あなたの設定がそれらの前提条件に違反した場合、あらゆる種類の不具合が発生することが知られています。 また、ゲームはコンフィギュレータを検知することができないため(コンフィギュレータが疑似的に作り出す低レベルのハードウェア入力を受信するだけなので)、コントローラ入力の画面上のグリフが一致しない可能性があります。

ネイティブモード

ネイティブモードでは、ゲームは「アクション」という形で、コンフィギュレータから直接データを受け取ります。ここでのポイントは、ゲーム自体はどのような入力がアクションを起こすのかを知ることはなく、単にそのアクションが実行されます。 すべての設定とコントロール設定は、Steam入力コンフィギュレータに委ねられています。 ゲームは、画面上に適切なグリフを表示するために、どの物理的なコントロールがどのアクションに割り当てられているかという情報を、特別なAPI呼び出しを介して要求することができます。

Steam入力API

Steam入力APIは、ネイティブモードでSICと直接対話するために、開発者が使用するアプリケーションプログラミングインターフェイスです。 このAPIは、レガシーモードのサポートには必要ありません。

詳細はこちらのドキュメントを参照してください:ISteamInput

コントローラ設定

プレイヤーは、ネイティブモード、レガシーモード、またはその両方を使用して、ライブラリ内の任意のゲームに、完全にカスタマイズされた入力マッピングを設定できます。 これらの入力マッピングは、「コントローラ設定」と呼ばれており、プレイヤーは1つのゲームに対して、異なるコントローラ設定を作成したり、オンラインで他のプレイヤーと共有することもできます。

入力の階層

物理的入力

「物理的入力」は、ユーザーが操作するすべての入力デバイス上で、コンピューターへの入力データを生成する物理的メカニズムで、 デジタルとアナログの両方の形式があります。例として、ボタン、ジョイスティック、DPAD、バンパー、トリガー、スイッチ、ハットスイッチ、トラックボール、トラックパッド、ジャイロスコープなどがあります。

さらに抽象的な概念については後述しますが、ここでいう「物理的入力」とは、指(好みによっては足のつま先)を使って実際に動かす入力デバイス上の小さな部分であることを覚えておいてください。

入力ソース

「入力ソース」とは、データの出力方法を変更するために、様々なモードから1つを適用できる、より大きなモジュラーユニットと考えられるデバイスの部分を指します。

抽象的概念として説明するとそういう話になります。

実例を見てみましょう:DPADとひし形に配置された4つのフェイスボタンの違いは何でしょう?

input_dpad.pnginput_bpad.png

どちらも4つのデジタル「ボタン」がありますが、ほとんどの DPADでは各フェイスボタンを個別に押すことができる一方で、物理的に「上+下」または「左+右」を同時に押すことが不可能な設計になっています。 しかし、Steam入力では、フェイスボタンにDPADの制限を課すことができます。

DPADとフェイスボタン群は、それぞれ4つの個別の「物理的入力」から構成されていますが、「DPAD」と「フェイスボタン群」を便宜的にそれぞれ1ユニットとして考えることによって、ユニット全体がどのように動作するかを変更することができます。

認識される「入力ソース」のリストは次のとおりです:

  • 左トラックパッド
  • 右トラックパッド
  • 中央トラックパッド
  • 左ジョイスティック
  • 右ジョイスティック
  • ABXY
  • DPAD
  • 左トリガー
  • 右トリガー
  • ジャイロ
  • スイッチ
注意:入力ソース「スイッチ」とは、他のグループに属していないすべての物理入力(例、BACKおよびSTARTボタン、左右ショルダーボタン、バックパドルグリップ)です。

参考:

入力ソースモード

入力ソースには、入力に対する動作を変更できる異なるモードを設定でき、 これらは「入力ソースモード」と呼ばれています。これらはデジタル入力に便利ですが、入力ソースモードで利便性が高く最も利用さるのはアナログコントロール上で、特にさまざまな設定が可能なトラックパッドで使われています。

認識される「入力ソースモード」のリストは次のとおりです:

  • DPAD
  • 4つのボタン群
  • 絶対マウス
  • 相対マウス
  • ジョイスティック移動
  • ジョイスティックマウス
  • ジョイスティックカメラ
  • スクロールホイール
  • トリガー
  • タッチメニュー
  • マウスジョイスティック
  • マウス領域
  • パイ型メニュー
  • スイッチ

参考:

簡単な要約:

物理的入力
デバイス上で実際に操作する物理的な入力です。 例:A ボタン、DPAD上の「上」ボタンなど。

入力ソース
より大きなモジュラーユニットにグループ化できる個々の物理入力のグループです。 DPAD全体、4つのフェイスボタン群、左ジョイスティックの全体など。

入力ソースモード
入力ソースに対して強制する特定の動作です。 例:「フェイスボタンをDPADのように動作させる」、「左ジョイスティックを4つのフェイスボタンのように動作させる」など。

アクション

アクションはSteam入力APIがすべてを統制するために使用するイベントです。 ネイティブモードではゲームは「ボタンAが押された」というイベント通知は受け取らず、単に「ジャンプ」(または、ボタンに設定されているその他の)イベントを取得するだけで、どのような種類の入力で「ジャンプ」というイベントが発生するのかは、完全にプレイヤーの手に委ねられています。

デジタルアクション

デジタルアクションは最も簡単で、最も一般的なアクションです。 それらは単にオンまたはオフで表され、ゲームは単純に検出を繰り返し、それらのアクションの状態の監視します。

アナログアクション

アナログ動作には1つ以上のデータ軸があり、キャラクターのスムーズな動作、車のステアリング、カメラの制御などに使用されます。 標準的なジョイスティックおよびマウス駆動のアクションは通常X軸とY軸の2軸を持ちますが、(通常アナログトリガーにバインドされるアクションのように)1軸のアナログアクションも可能です。この場合、アクションデータは引き続き2つの軸のデータを報告しますが、Y軸のデータは常にゼロになります。

アクション名

すべてのアクションは「ジャンプ」または「パンチ」といった名前で識別される必要があります。 これらの文字列値はプレイヤーに表示される(「アクションラベル」と呼ばれるローカライズ可能な)文字列とは別個のものです。

アクションハンドル

文字列名でアクションを参照する方法ではコストがかかり非効率的なため、ゲームがAPIをブートストラップする際に、すべてのアクション名を登録し、戻り値に返されるアクション名に対応する、整数のアクションハンドルを受け取る必要があります。

アクション起点

「アクション起点」は、プレイヤーのコントローラ設定で、特定のアクションに対して割り当てられた入力の種類を識別する文字列です。

アクションセット

アクションセットは、関連付けられたアクションの論理的なグループです。 一定の時間内で特定の入力デバイスに対してアクティブなアクションセットは1つだけです。 たとえば、GTAVのような複数の車両や移動モードを持つゲームのために「運転」「歩行」「飛行」といったアクションセットを作成できるのと同様に、一連のメニュー操作中にのみアクティブな「メニュー」アクションセットを作成することができます。 アクションセットには、ネイティブモードとレガシーモードの両方が存在し、 ネイティブモードは開発者によって明示的に定義されています。ゲームは現在アクティブなアクションセットを指定するAPI呼び出しを行います。 レガシーモードでは、アクションセットの変更はプレイヤー自身によって手動で呼び出される必要があります。 どちらの場合も、アクションセットは、ゲーム内のどこかで起こり得るすべてのアクションに対して、永続的に割り当てたり、常にオンの状態に保つといった必要性を取り除くことによって、コントローラの利便性を向上させます。

アクションセットレイヤー

アクションセットレイヤーは、既存のコントロールのセットにオーバーレイできるオプションのアクションバインドのセットです。 アクションセットとは異なり、レイヤーはアクションセット内部に存在するアクションを引き出し、適用時にアクティブなものをそっくり置き換えるのではなく、小さな変更を適用します。 これには設定の変更だけでなく、基本アクションセットへの割り当ての追加や削除が含まれます。 1度に1つ以上のレイヤーを適用でき、連続して適用されます。

詳細はアクションセットレイヤーを参照してください。

物理的フィードバック

入力デバイスによっては、画面上で発生するイベントだけでなく、振動や光によってプレイヤーにフィードバックを与える機能を持つものもあります。

ハプティクス

ハプティックフィードバックは、エミュレートされたトラックボールの仮想加速度の伝達などのように、大きなタッチ面上でプレイヤーの手と指が置かれている位置を確定する手助けとなる、きめ細かい物理的な感覚を実現します。 ハプティクスはSteamコントローラおよびNintendo Switchコントローラーの数機種でサポートされています。 サポートのないデバイスでは、ハプティクス用のAPI呼び出しは無視されます。

ランブル

より伝統的な物理的フィードバック形態の1つであるランブルは、内蔵モーターによってコントローラに振動を発生させます。 この機能はPlayStation 4コントローラーとXboxコントローラー(および多くのXInput互換ジェネリックデバイス)でサポートされています。 Steamコントローラは真のランブル機能を備えていませんが、ハプティクスを使って類似体験をエミュレートします(そのためAPI呼び出しに応答して振動を発生させます)。

LED

SteamコントローラおよびPlayStation 4コントローラーは、LEDライトを搭載しています。 Steamコントローラのライトは常に白色ですが、PlayStation 4コントローラーでは完全にプログラム可能なカラーLEDを搭載しています。 両デバイス共にLEDライトの色を変更するAPIコールに応答しますが、Steamコントローラでは色は単色で、単に明るさを制御するために使用し、PlayStation 4コントローラーでは色と明るさの両方を制御できます。 サポートのないデバイスでは、LED用のAPI呼び出しは無視されます。