仮想コントローラーとマッピングに関する設定や注意事項 - x0oey6B8/KeyToKey-Web GitHub Wiki
目次
- 目次
- 仮想コントローラーとは
- マッピングとは
- マッピング機能は何に使うのか
- 仮想コントローラーをインストールする
- 仮想コントローラーを有効にする
- マッピングを有効にする
- 動作確認
- 注意事項
- 特定のアプリに対してコントローラーを隠す
仮想コントローラーとは
物理的なコントローラーを必要としないパソコン上にだけ存在するコントローラー(プログラム)です。 仮想コントローラーはマクロやマッピングを介して動かすことが出来ます。
マッピングとは
現実のコントローラーの入力をそっくりそのまま仮想コントローラーにセットすることで、あたかも実際のコントローラーを動かしているかのように振る舞わせる機能です。
マッピング機能は何に使うのか
マッピング機能はそもそも何に使うのか説明していきたいと思います。 しかし、その前のコントローラーにはの 2 つの規格があることを知っておく必要があります。 また、その規格の注意点についても知っておく必要があるので読んでおいてください。
2 つの規格
コントローラーには 2 つの規格が存在します。一つはDirectInput
、もう一つはXInput
と呼ばれており、ゲームなどコントローラーを使うソフトウェアはこれらの規格を使用してやり取りを行っています。
そのため、コントローラーをゲームで使うにはコントローラーとゲーム側の規格が一致している必要があります。
ゲーム側が両方の規格に対応している場合もあります。
マッピングにおける仮想コントローラーの役割
仮想コントローラーの役割はコントローラーとゲームの間に入ることにあります。 例えば、「ゲーム側が XInput にしか対応していないのに自分の持っているコントローラーは DirectInput だった」みたいなケースがあると思います。 そういった場合にゲームに対応する規格の仮想コントローラーを間に挟むことでゲームとのやり取りを行えるわけです。
仮想コントローラーをインストールする
KeyToKey は仮想コントローラーとして、ViGEm Bus Driver を採用しています。 ViGEm をインストールすると以下の 2 つのコントローラーが使用できるようになります。
- 仮想 XBox360 コントローラー(XInput/DirectInput)
- 仮想 DualShock4 コントローラー(DirectInput)
インストール
インストールは次の手順に従うか、ViGEm Bus Driver のリリースページにあるインストラーからでもできます。
- 編集ウィンドウを開き「アプリケーションの設定」のページを表示します。
- 「仮想コントローラーのドライバ」カテゴリへ移動します。
- 「ViGEm Bus Driver 1.xx.xxxx をインストール」をクリックします:warning:インストールには少し時間がかかる可能性があります。しばらくお待ち下さい。
- インストールが終わると次のような画面になれば完了です。
アンインストールに関して
ViGEm のアンインストールは KeyToKey ではサポートしていません。 Windows のスタートメニューで「プログラムの追加と削除」と検索し、アプリの一覧からアンインストールを実行してください。 :warning: アンインストールを完了するには PC の再起動が必要です。
仮想コントローラーを有効にする
仮想コントローラーを使用するには事前にデバイスを有効にしておく必要があります。
仮想 XInput コントローラーを有効にする
「仮想 XInput コントローラー」カテゴリにあるスライダーで使用するコントローラーの数を設定します。 :warning: 設定変更を適用するには、KeyToKey の再起動が必要です。
仮想 DualShock4 コントローラーを有効にする
「仮想 DualShock4 コントローラー」カテゴリにある「仮想 DualShock4 コントローラーを有効にする」にチェックを入れます。 :warning: 設定変更を適用するには、KeyToKey の再起動が必要です。
マッピングを有効にする
「割り当て設定(コントローラー)」を開き、右側のパネルからマッピングの設定にチェックを入れることで有効にできます。 後は保存&再読み込みをすれば、マッピングされるはずです。
動作確認
以下からコントロラーの挙動を視覚的に確認することが可能です。
「メインウィンドウ」>「ツール」>「入力の可視化」>「コントローラー(DualShock4)」
例えば、XInput の 1 つ目のコントローラーの動作を確認するには以下のように設定します。
コントローラーを右クリック >「コントローラー」>「XInput」>「XInput Device 0」
注意事項
必ずしも仮想コントローラーが使えるとは限らない
コントローラーを使用するゲームなどのソフトウェア(ここではゲームと呼びます)は多くの場合、接続されている全てのコントローラーの入力を監視せず、一つのコントローラーを監視します。 どのようにして使用されるコントローラーが選定されるかはゲームによりますが、仮想コントローラーをゲーム上で動作させるには仮想コントローラーがゲームによって選定される必要があります。 当然ながら仮想コントローラーが選定されない場合はゲーム上で動かすことはできません。
仮想コントローラーをゲームに選定させるには、不要なコントローラーは物理的に接続を解除してください。 それでもゲームが仮想コントローラーを選ばない場合は、仮想コントローラーより優先されるコントローラーに対して、特定のアプリに対してコントローラーを隠すを試してみてください。
仮想 XInput コントローラーの接続番号
仮想 XInput のコントローラーの番号というのは、基本的に XInput によって自動的に割り振られ、変更することもできないようです。
https://learn.microsoft.com/ja-jp/windows/win32/xinput/getting-started-with-xinput
XInput API では、いつでも最大 4 つのコントローラーが接続できます。 XInput 関数はすべて、設定または照会されるコントローラーを識別するために渡される dwUserIndex パラメーターを必要とします。 この ID は 0 から 3 の範囲になり、XInput によって自動的に設定されます。 この番号は、コントローラーが接続されているポートに対応しており、変更できません。
仮想 XInput コントローラーを有効にしても、必ずしも目的の番号になるとは限らないことに注意する必要があります。 基本的にそこまで心配する必要はありませんが、例えば、現実の XInput コントローラーを接続していると、番号が狂う可能性があるため要注意です。
XInput の仮想コントローラーだけど、DirectInput の仮想コントロラーでもある
仮想 XInput コントローラーは、仮想の XBox360 コントローラーであるため、デバイスの一覧には「Controller(XBOX 360 ForWIndows)」が表示されます。 「Controller(XBOX 360 For WIndows)」は DirectInput コントローラーです。 仕様上、XInput の仮想コントローラーにマッピングやアクション実行などを行うと上記のデバイスも一緒に動きます(あまり気にする必要はありません)
マッピングでは現実のコントローラーが邪魔になる可能性がある
マッピング機能では現実のコントローラーの入力を仮想コントローラーの入力に反映しますが、このとき現実のコントローラーの入力はブロックされず(できない)邪魔になる可能性があります。 必ずしも仮想コントローラーが使えるとは限らないで述べたように、ゲームによっては現実のコントローラーが優先的に選定され、仮想コントローラーがゲーム上で使用できない可能性があります。 もしそうなった場合は、特定のアプリに対してコントローラーを隠すを試してみてください。
マッピング中の仮想コントローラーを操作したい
マッピング使用時、仮想コントローラーをマクロ等で操作してもマッピングの機能によって入力状態がすぐに上書きされるため、操作前にマッピングを一時停止する必要があります。 停止はマッピングの設定から、そもそもマッピングしない設定にするか、各マクロでマッピングを一時停止してください。 また、マッピングの一時停止はKeyToKeyによって自動解除されることはないので、マクロの終了時などに再開する必要があります。
■C#スクリプトの例
// 仮想XInputコントローラー0を取得して左スティックのマッピングを停止する
var virtualXInput0 = VirtualXInput.GetController(userIndex: 0);
virtualXInput0.LeftStick.Mapping.Suspend();
■ブロックマクロの例
特定のアプリに対してコントローラーを隠す
特定のアプリに対してコントローラーを隠すにはHidHide(別途インストールが必要)を使用するといいかもしれません。
インストールはリリースページに移動して、HidHide_1.2.98_x64.exe
をダウンロードして実行します。
インストール手順については省略しますが、インストール後は再起動が必要なようです。
次のダイアログが出たら「はい」を押して再起動してください。「いいえ」を押した場合は、手動で再起動する必要があります。
HidHide configuration client
を実行すると、次のような画面が表示されます。
Applications タブ
特定のアプリがデバイスを認識できるように設定するタブです。 初期設定ではホワイトリスト形式になっており、リストに入れたアプリのみ、デバイスを認識できるようになっています。 右下の+ボタンから実行ファイルを選択すると、その実行ファイルのプロセスはデバイスを認識できるようになります。
左下のInverse application cloak
にチェックを入れると、ホワイトリスト形式からブラックリスト形式に変更されます。
ブラックリスト形式では、リストに追加したアプリのみ、デバイスを認識できなくなります。
この設定を有効にした場合は、デフォルトでリストに入っている「HidHideClient.exe」は右下のマイナスボタンを押して外しておいてください。
確認はしてませんが、HidHide 自身がデバイスを認識できなくなる可能性があります。
ホワイトリスト形式の場合、HidHide の存在を忘れた時にトラブルになりかねないため、個人的にはInverse application cloak
にチェックを入れてブラックリスト形式にしておき、隠したいアプリがあった場合に、都度、リストに追加するようにしたほうがいいと思います。
Devices タブ
隠すデバイスを設定するタブです。
リストにあるのがデバイスの一覧で、デバイス名の横にあるチェックボックスにチェックを入れるとデバイスが隠されます(赤いアイコンが表示されてる状態)
デバイスを隠すには一番下にある、Enable device hiding
を有効にする必要があります。
KeyToKey で試してみる
KeyToKey の仮想 DualShock4 コントローラーをリストに追加して、KeyToKey が DualShock4 を認識しなくなるかどうかを試します。
- Applications タブでは、次のように、
Inverse application cloak
にチェックをいれ、リストに KeyToKey を追加します。 - Devices タブでは、
Sony Computer Entertainment Wireless Controller
にチェックをいれ、一番下にあるEnable device hiding
にもチェックを入れます。 - 設定ができたら、KeyToKeyを再起行します。KeyToKey は
Wiress Controller
を認識していませんが、ゲームコントローラーウィンドウでは認識されるようになりました。