Xbox360コントローラーをPCで使う際に知っておきたいこと
ここでは、現状(2012年4月現在)Xbox360コントローラーをPCで使用する際に知っておいたほうが良いと思われることをまとめています。細かな技術的な内容などはさておき、最低限の内容を記載しています。
XInputとDirectInput
PCでゲームコントローラを使用する場合、ゲームコントローラーの形式にはXInput形式とDirectInput形式があります。
DirectInput
旧来からPCで使用されてきた形式。ゲームパッドをはじめ、ハンドルコントローラやフライトシムで使用する複雑な操縦桿コントローラまで、さまざまなタイプのコントローラーに対応してます。そのため、プログラム側ではコントローラーが持つボタン数やスティック数・振動機能の有無までさまざまなタイプに対応する必要があります。また、ボタンやスティックの数や位置も決められていないため、最適な操作方法で操作するためにはユーザ自身が使用するコントローラーに合わせてキー割り当て設定を行う必要があります。コントローラーとゲームの実装によっては、うまく割り当てができないケースもあります。
DirectInputはMicrosoft DirectXの入力制御用コンポーネントとして提供されてきましたが、DirectX 8(2000年ごろ)からほぼ更新されていません。
XInput
DirectInputに変わる形式としてMicrosoftが新たに作成し推奨している形式。Xbox360コントローラーを想定した形式となります。ボタン・スティックの配置・振動機能についても、すべてXBOX360コントローラーが持つ形で統一されています。そのため特別なキー設定を行わなくても、最適な(製作者が想定している)操作方法で操作することが出来ます。だだし、Xbox360コントローラー以上のボタン・スティックなどには対応していません。
Xbox360コントローラーはXInput形式で使用できることが大きな特徴です。他の一般的なPC用ゲームコントローラーはDirectInput形式のみに対応しています。
Xbox360コントローラー以外のXInput対応コントローラーもいくつか販売されています。
ゲーム側の対応状況
これまで、ゲームコントローラーに対応しているゲームは、DirectInput形式に対応していることが一般的でした。近年は、XInputに対応したゲームも多くなってきており、XInput形式のみに対応したものも増えてきています。
ゲームがどの形式のコントローラーに対応しているか調べるには?
Xbox360コントローラーのドライバ
Xbox360コントローラーは、Windows用ドライバ(公式ドライバ)を使用するとXInputコントローラーとして認識されます。XInputコントローラーはDirectInput互換機能を持っており、上記DirectInput形式・XInput形式両方で使用することが出来ます。
Windows Vista以降ではOSにドライバが含まれており、XBOX360コントローラーをつなぐだけで自動的にドライバがインストールされ使用することができます。
このドライバの仕様として、DirectInputコントローラとして使用する場合に以下の制限があります。
左右トリガーが同時に使えない
振動機能に対応していない
DirectInputでのこれらの問題に対しては、XInput Plusが持つDirectInput出力機能で解決できる場合があります。
DirectInput出力機能で対応できない場合は、有志の方が作成されたドライバ(非公式ドライバ)を導入することで解決できます。ただし、このドライバを導入した場合は、XInputコントローラとしては使用することが出来なくなります。
非公式ドライバの導入方法などはここでは説明しません。検索すれば詳細に説明したサイト等が多く見つかると思います
(非公式ドライバは、ドライバレベルでキー割り当ての変更などさまざまな設定も行えるすばらしいものです。作成者の方にはここで感謝を申し上げます)
Xbox360コントローラーをPCで使用するには?
プレイしたいゲームがDirectInput対応
公式ドライバでの機能に不満がある場合は、XInput PlusのDirectInput出力機能を試してみてください。うまくいかない場合、非公式ドライバを使用すると解決できます。
プレイしたいゲームがXInput対応
公式ドライバで使用します。非公式ドライバを導入した場合はXInputで使用できませんので、公式ドライバに切り替える必要があります。
XInput Plusは何をしてくれるの?
XInput Plusは、公式ドライバを使用し、XInputに対応したゲームで動作します。乱暴に説明すると、公式ドライバでの入力状態とゲームの間に割り込み、入力状態を加工してゲームに渡すことで、各種機能を実現しています。
DirectInput形式での使用時には、DirectInput出力機能により、XInputの出力をDirectInputに変換出力することで対応しています。