XNA では XInput によるデバイス入力が可能ですが、旧式の DirectInput によるデバイス入力には対応していません。
しかし、2009年現在でも XInput に対応していないゲームコントローラも数多く存在しており、これらに対応した Windows ゲームを制作したいこともあるかもしれません。
ここでは XNA で XInput 非対応のゲームコントローラを使用する方法をご紹介します。



[SlimDX]
SlimDX は .Netアプリケーションから DirectX の API を使用するためのオープンソースのライブラリです。
SlimDX.DirectInput を使用したデバイス入力が行えます。

SlimDX(英語)
http://slimdx.mdxinfo.com/



[XBOX360 Controller Emulator]
XBOX360 Controller Emulator は DirectInput 対応のゲームコントローラを XInput に対応させるためのプログラムです。

ToCA EDIT > Downloads > Recent Projects > XBOX360 Controller Emulator v3.0(英語)
http://www.tocaedit.com/IB/index.php?automodule=downloads&showfile=4

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」に記述されていない場合
  1. try
  2. {
  3. gamePadStates[i] = GamePad.GetState((PlayerIndex)i, deadZone);
  4. gamePadCapabilities[i] = GamePad.GetCapabilities((PlayerIndex)i);
  5. }
  6. catch(InvalidOperationException e)
  7. {
  8. }
  9.  

以上の手順で XNA で XInput 非対応のゲームコントローラを使用できるようになります。

XNA クリエーターズ クラブ オンライン > 入力レポーター
http://creators.xna.com/ja-JP/utilities/inputreporter

このスクリーンショットでは確認できませんが、XInput 非対応のゲームコントローラを使用しています。

※「xbox360cemu.ini 」の設定変更
○デフォルトではゲームコントローラは一つだけしか設定されていませんので、ゲームコントローラ1の設定を他のゲームコントローラにコピーするようにします。
○デフォルトでは初期化時にビープ音が鳴るようになっていますので、これを OFF にします。
  1. [Options]
  2. UseAutoPad=1 #use 0 to 1; automatically make other PAD to PAD1 after
  3.  
  4. detecting movement
  5. UseInitBeep=0 #use 0 to 1; default 1; beep on init
  6. }
  7.  


最終更新:2009年07月24日 12:23
添付ファイル