仮想コントローラーとマッピングに関する設定や注意事項 - x0oey6B8/KeyToKey-Web GitHub Wiki

目次

仮想コントローラーとは

物理的なコントローラーを必要としないパソコン上にだけ存在するコントローラー(プログラム)です。 仮想コントローラーはマクロやマッピングを介して動かすことが出来ます。

マッピングとは

現実のコントローラーの入力をそっくりそのまま仮想コントローラーにセットすることで、あたかも実際のコントローラーを動かしているかのように振る舞わせる機能です。

マッピング機能は何に使うのか

マッピング機能はそもそも何に使うのか説明していきたいと思います。 しかし、その前のコントローラーにはの 2 つの規格があることを知っておく必要があります。 また、その規格の注意点についても知っておく必要があるので読んでおいてください。

2 つの規格

コントローラーには 2 つの規格が存在します。一つはDirectInput、もう一つはXInputと呼ばれており、ゲームなどコントローラーを使うソフトウェアはこれらの規格を使用してやり取りを行っています。 そのため、コントローラーをゲームで使うにはコントローラーとゲーム側の規格が一致している必要があります。

ゲーム側が両方の規格に対応している場合もあります。

59836a15

マッピングにおける仮想コントローラーの役割

仮想コントローラーの役割はコントローラーとゲームの間に入ることにあります。 例えば、「ゲーム側が XInput にしか対応していないのに自分の持っているコントローラーは DirectInput だった」みたいなケースがあると思います。 そういった場合にゲームに対応する規格の仮想コントローラーを間に挟むことでゲームとのやり取りを行えるわけです。

dad941a9

仮想コントローラーをインストールする

KeyToKey は仮想コントローラーとして、ViGEm Bus Driver を採用しています。 ViGEm をインストールすると以下の 2 つのコントローラーが使用できるようになります。

  • 仮想 XBox360 コントローラー(XInput/DirectInput)
  • 仮想 DualShock4 コントローラー(DirectInput)

インストール

インストールは次の手順に従うか、ViGEm Bus Driverリリースページにあるインストラーからでもできます。

  1. 編集ウィンドウを開き「アプリケーションの設定」のページを表示します。
  2. 「仮想コントローラーのドライバ」カテゴリへ移動します。
  3. 「ViGEm Bus Driver 1.xx.xxxx をインストール」をクリックします:warning:インストールには少し時間がかかる可能性があります。しばらくお待ち下さい。 image
  4. インストールが終わると次のような画面になれば完了です。 installed

アンインストールに関して

ViGEm のアンインストールは KeyToKey ではサポートしていません。 Windows のスタートメニューで「プログラムの追加と削除」と検索し、アプリの一覧からアンインストールを実行してください。 :warning: アンインストールを完了するには PC の再起動が必要です。

uninstallpng

仮想コントローラーを有効にする

仮想コントローラーを使用するには事前にデバイスを有効にしておく必要があります。

仮想 XInput コントローラーを有効にする

「仮想 XInput コントローラー」カテゴリにあるスライダーで使用するコントローラーの数を設定します。 :warning: 設定変更を適用するには、KeyToKey の再起動が必要です。

image

仮想 DualShock4 コントローラーを有効にする

「仮想 DualShock4 コントローラー」カテゴリにある「仮想 DualShock4 コントローラーを有効にする」にチェックを入れます。 :warning: 設定変更を適用するには、KeyToKey の再起動が必要です。

image

マッピングを有効にする

「割り当て設定(コントローラー)」を開き、右側のパネルからマッピングの設定にチェックを入れることで有効にできます。 後は保存&再読み込みをすれば、マッピングされるはずです。

image

動作確認

以下からコントロラーの挙動を視覚的に確認することが可能です。 「メインウィンドウ」>「ツール」>「入力の可視化」>「コントローラー(DualShock4)」

例えば、XInput の 1 つ目のコントローラーの動作を確認するには以下のように設定します。 コントローラーを右クリック >「コントローラー」>「XInput」>「XInput Device 0」

75ff5ada

注意事項

必ずしも仮想コントローラーが使えるとは限らない

コントローラーを使用するゲームなどのソフトウェア(ここではゲームと呼びます)は多くの場合、接続されている全てのコントローラーの入力を監視せず、一つのコントローラーを監視します。 どのようにして使用されるコントローラーが選定されるかはゲームによりますが、仮想コントローラーをゲーム上で動作させるには仮想コントローラーがゲームによって選定される必要があります。 当然ながら仮想コントローラーが選定されない場合はゲーム上で動かすことはできません。

仮想コントローラーをゲームに選定させるには、不要なコントローラーは物理的に接続を解除してください。 それでもゲームが仮想コントローラーを選ばない場合は、仮想コントローラーより優先されるコントローラーに対して、特定のアプリに対してコントローラーを隠すを試してみてください。

仮想 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();

■ブロックマクロの例

image

特定のアプリに対してコントローラーを隠す

特定のアプリに対してコントローラーを隠すにはHidHide(別途インストールが必要)を使用するといいかもしれません。

インストールはリリースページに移動して、HidHide_1.2.98_x64.exeをダウンロードして実行します。 インストール手順については省略しますが、インストール後は再起動が必要なようです。 次のダイアログが出たら「はい」を押して再起動してください。「いいえ」を押した場合は、手動で再起動する必要があります。

image

HidHide configuration client を実行すると、次のような画面が表示されます。

image

Applications タブ

特定のアプリがデバイスを認識できるように設定するタブです。 初期設定ではホワイトリスト形式になっており、リストに入れたアプリのみ、デバイスを認識できるようになっています。 右下の+ボタンから実行ファイルを選択すると、その実行ファイルのプロセスはデバイスを認識できるようになります。

左下のInverse application cloakにチェックを入れると、ホワイトリスト形式からブラックリスト形式に変更されます。 ブラックリスト形式では、リストに追加したアプリのみ、デバイスを認識できなくなります。 この設定を有効にした場合は、デフォルトでリストに入っている「HidHideClient.exe」は右下のマイナスボタンを押して外しておいてください。 確認はしてませんが、HidHide 自身がデバイスを認識できなくなる可能性があります。

ホワイトリスト形式の場合、HidHide の存在を忘れた時にトラブルになりかねないため、個人的にはInverse application cloakにチェックを入れてブラックリスト形式にしておき、隠したいアプリがあった場合に、都度、リストに追加するようにしたほうがいいと思います。

applicationspng

Devices タブ

隠すデバイスを設定するタブです。

リストにあるのがデバイスの一覧で、デバイス名の横にあるチェックボックスにチェックを入れるとデバイスが隠されます(赤いアイコンが表示されてる状態)

デバイスを隠すには一番下にある、Enable device hidingを有効にする必要があります。

devices

KeyToKey で試してみる

KeyToKey の仮想 DualShock4 コントローラーをリストに追加して、KeyToKey が DualShock4 を認識しなくなるかどうかを試します。

  1. Applications タブでは、次のように、Inverse application cloakにチェックをいれ、リストに KeyToKey を追加します。 image
  2. Devices タブでは、Sony Computer Entertainment Wireless Controllerにチェックをいれ、一番下にあるEnable device hidingにもチェックを入れます。 image
  3. 設定ができたら、KeyToKeyを再起行します。KeyToKey はWiress Controllerを認識していませんが、ゲームコントローラーウィンドウでは認識されるようになりました。 hidhide_wiress_controllerpng