仮想的ににJoystickを作成し、Unity上でJoystickの出力を制御したい。 主な用途としては、
などを想定。
調べたところ、vJoyというのがSDKも公開されていて使いやすそう。(winのみ)
vJoySetup.exe を実行でインストール。仮想デバイスとして入力機器が表示される。
vJoyFeeder (Demo) - 仮想ジョイスティックの出力を行うアプリ
Monitor vJoy - vJoyへの入力を見るモニター
vJoyは主にRPGとかのレベルあげだったりマクロみたいな感じでも使われているよう。
仮想パッドvjoy SDKのテスト | 自動マクロプログラミング
このあたりも参考に。
開発は、
このあたりを使うのが良さそう。
どちらもほぼ同じだが、vGenの方が汎用化されているようなのでおすすめ。
vJoyの出力はDirectInputになる。
Unityからは問題なく取得できるが、最近のゲームをvJoy経由で動かそうとするとxInputで無いので動かせない。
そこで、DirectInput から xInput への出力変換を行う。 調べると、x360ce Xbox 360 Controller Emulator がよく使われているようだが、対応するゲームが決まっている為、別の手段へ。
UCRを発見 www.autohotkey.com
インストール Releases · evilC/UCR · GitHub 後、UCR.exe を立ち上げて、IO Class > vJoy > Install SCPVBus を選択する。
アプリをリスタートすると、仮想デバイスが認識される。仮想デバイスを使用するときは常に UCR.exe を立ち上げておく必要あり。
その後、InputとOutputのマッピングを行っていく。
疑問
vJoyでvXbox が仮想xInputの出力だと思うが、使い方がイマイチわからなかった。これ使えばUCRは必要なくそのままxInput出力できそうではあるが。
結論 vGenを使うのが良い
vGen/Program.cs at master · shauleiz/vGen · GitHub UCR使わないと、vJoyでxInput使えないかと思っていたけれど、vGen使うとDevType type = DevType.vXbox でUCRと同じくデバイスが認識される。 こっちを使ってxGenで開発する方が使い勝手良さそう。
後日、vJoyを別なマシンにインストールしたが、Setupが99%から全く先に進まなかった。仕方ないので強制終了。気がかりではあるがインストールには問題なさそうで正常に動作はする。
vJoyの設定
Configure vJoy アプリで、vJoyの出力設定(ボタンの個数など)を変更することが出来る。変更後は、再起動を求められるので再起動を行う。再起動後、vJoyに設定が反映される。