XBOX 向けに開発している場合、バージョン v.0 は 2510 GDK 以降の GDK で利用可能な既定のバージョンです。v1.0+ API を活用するタイトルは、Microsoft.GameInput NuGet パッケージと統合することで、PC (v1.0+) とコンソール (v2.2+) の両方で利用できます。コンソールでこの NuGet パッケージを使用するには GDK 2510 以降が必要です。PC アプリでは、NuGet パッケージに含まれる最新の GameInput 再配布可能パッケージがターゲットマシンにインストールされている必要があります。コンソールアプリは NuGet パッケージ内の最新の GameInput ヘッダーとライブラリに対してコンパイルおよびリンクする必要がありますが、最新の GameInput ランタイムが XBOX の GDK イメージに含まれているため、再配布可能パッケージは必要ありません。
ランタイムと API バージョンのアップグレード
GameInput の異なるバージョンには類似した名前とメソッドがありますが、異なる UUID を持つ明確にバージョン管理されています。GameInput API v.1 から始まり、各バージョンは一意の名前空間 (たとえば、GameInput::v1) で定義されます。GameInput の基盤となる同じオブジェクトがこれらのインターフェイスを実装します。バージョン間を切り替えるために QueryInterface を実行できます。つまり、必要に応じてゲームで API の使用を混在させることができます。
API がグローバル名前空間で定義されていた GameInput v.0 からアップグレードする場合、using namespace GameInput::v1 文を追加することで、v.1 および以降のリビジョンの API を採用するために更新する必要がある GameInput の呼び出し箇所の数を減らせることに気付くかもしれません。
ランタイムバージョンチェックに加えて、GAMEINPUT_API_VERSION プロセッサ定義をチェックすることで条件付きコンパイルを使用できます。この定義は、現在使用されている GameInput API バージョンおよび GameInput のメジャーバージョンに対応します。v.0 API にはこの定義はなかったため、このバージョンを条件付きでテストしたい場合は、GameInput ヘッダーの include の後に次のスニペットを追加できます。
ランタイムのみのアップグレード
GameInput では、API の使用を更新することを強制せずに、最新のバグ修正を取得できます。これらのバグ修正を取得するには、最新の Microsoft.GameInput NuGet パッケージにバンドルされている GameInput 再配布可能パッケージをインストールします。GameInput は古いバージョンの API とバイナリ互換性を維持しているため、既存のヘッダーを新しいランタイムと共に使用し続けることができます。テスト環境の機能が本番と一致するように、最新の GameInput バイナリをタイトルと共に再配布することを忘れないでください。GameInput v.1 の変更点
GameInput の以前のバージョンを使用している場合、多くの未実装の関数と、対応する列挙型や定数が v.1 API 以降で削除されていることに注意してください。さらに、バージョン管理を容易にするために API はGameInput::v1 名前空間に配置されます。これらの変更により、このバージョン (および将来のバージョン) を使用してそのコードをビルドするときにコンパイルエラーが発生する可能性があります。注目すべき変更点は次のとおりです。
-
IGameInputDevice::GetDeviceInfoは以前、関数の戻り値として結果のIGameInputDeviceInfo構造体を返していました。この構造体は現在、関数の out パラメーターとして返され、関数の戻り値はHRESULTになっています。 -
IGameInput::UnregisterCallbackは以前、2 番目のパラメーターとしてタイムアウト値を受け取っていましたが、このパラメーターは削除されました。 -
IGameInputReading::GetSequenceNumberは削除されました。代わりにIGameInputReading::GetTimestampを使用してください。
バージョン管理のヒント
- v.0 と v.1 間で使用可能な API サーフェスの変更は最小限で、実装されていなかった機能の削除と、前述の関数シグネチャの変更があります。
- 元の
GameInput.hヘッダーからの元の v.0 API はまだサポートされていますが、その API は静的なままです。この場合、GDK、古い NuGet パッケージ、または Windows SDK からヘッダーをそのまま使用し続けることになります。 - どのバージョンの API を使用しても、開発中に NuGet パッケージ から最新の再配布可能パッケージをインストールし、その再配布可能パッケージ (またはより新しいもの) をエンドユーザーへのゲームのインストールプロセスの一部として含める必要があります。この再配布可能パッケージは、より新しい GameInput ランタイム実装が存在する場所であり、拡張されたコントローラーサポート、トラックパッドサポート、リモートデスクトップサポート、およびその他のさまざまなバグ修正など、API のすべてのバージョンを強化します。
