XNA では XInput によるデバイス入力が可能ですが、旧式の DirectInput によるデバイス入力には対応していません。
しかし、2009年現在でも XInput に対応していないゲームコントローラも数多く存在しており、これらに対応した Windows ゲームを制作したいこともあるかもしれません。
ここでは XNA で XInput 非対応のゲームコントローラを使用する方法をご紹介します。
[SlimDX]
SlimDX は .Netアプリケーションから DirectX の API を使用するためのオープンソースのライブラリです。
SlimDX.DirectInput を使用したデバイス入力が行えます。
1:ダウンロードサイトから「XBOX360 Controller Emulator v3.0」をダウンロードします。
※ダウンロードした圧縮ファイルには下記のファイルが含まれています。
○DLL
dinput8.dll
xinput9_1_0.dll
xinput1_3.dll
○設定INIファイル
xbox360cemu.ini
○テストアプリケーション
XInputTest.exe
2:XNA ゲームの実行ファイル(.exe)と同じフォルダに「xinput1_3.dll」「xbox360cemu.ini」をコピーします。
3:下記の場合に GamePad.GetStateメソッドや GamePad.GetCapabilitiesメソッドを呼び出すと InvalidOperationException 例外がスローされるので、これに対処するための記述を追加します。
○指定した PlayerIndex のゲームコントローラが接続されていない場合
○指定した PlayerIndex の設定が「xbox360cemu.ini」に記述されていない場合
try
{
gamePadStates[i] = GamePad.GetState((PlayerIndex)i, deadZone);
gamePadCapabilities[i] = GamePad.GetCapabilities((PlayerIndex)i);
}
catch(InvalidOperationException e)
{
}
以上の手順で XNA で XInput 非対応のゲームコントローラを使用できるようになります。
このスクリーンショットでは確認できませんが、XInput 非対応のゲームコントローラを使用しています。
※「xbox360cemu.ini 」の設定変更
○デフォルトではゲームコントローラは一つだけしか設定されていませんので、ゲームコントローラ1の設定を他のゲームコントローラにコピーするようにします。
○デフォルトでは初期化時にビープ音が鳴るようになっていますので、これを OFF にします。
[Options]
UseAutoPad=1 #use 0 to 1; automatically make other PAD to PAD1 after
detecting movement
UseInitBeep=0 #use 0 to 1; default 1; beep on init
}
最終更新:2009年07月24日 12:23