一部タイトルで発生する、「クライアント側のコントローラーが効かない」問題を”おそらく”解決できる方法がわかりました。おそらく。
すべてのSteamユーザーをイラつかせてくれたり喜ばせたりしている『Remote Play Together』(以降”RPT”と表記)で「クライアント側のコントローラーが効かない」問題の割とあっさり解決できることがわかったので、Steamユーザーに向けて専門用語を類も含めてそこそこわかりやすく雑にまとめました。
このページの目次
*2023年12月21日現在ではほぼ解決?*
すべてのケースに当てはまるか不明ですが大体の場合は『この項以降の書いているコントローラーを増やす+RPTのメインウインドからコントローラーの順番入れ替え』でほぼ解決できるようになったようです。
うまくいかない場合はこの記事のやり方でも解決できるので読んでみてください。
テストした環境(補足が無い限りホスト側)
パソコン本体
驚くほど古いパソコン(以降”PC”と表記)ですがRPTにおいては1台目を除いて問題なく動作します。
- 1台目
i7-2630QM
CPU内の機能を利用(iGPU)
実装4GB(仮想込み16GB)
Win7 - 2台目
i7-3200
GeForce 560
実装4GB(仮想込み16GB)
Win8.1
- 3台目(メイン)
i7-3770
GeForce 660
実装4GB(仮想込み8GB)
Win10
- 手伝ってくださった方々、公開してもよいと許可をもらった方々のパソコンパーツ(クライアント側)
周辺機器
- プレイステーションコントローラーをPCで使えるようにするコンバーター
品番、商品名ともに失念しました。天災により一つ破損。 - エレコム ゲームパッド JC-U3312SBK。実験に際しいただいたもの。これより下の説明で登場する2プレイヤー側コントローラーはこちらのことを指しています。ただし2020年の8月からの使用ですが結果は同じでした。気になる方は留意ください。
大前提
- 著作者TTTTは”すべてにおいて、一切の責任をおいません”。
- 著作権などの放棄はしていません。
- ほかのサイトに引用する際は、現在見ているこのページのURLを省略せずに貼り付けてください。
- Big Pictureでうまくいかなかった、タイトルによってうまく動作しなかった人向け。
- 最低限、両者ともにSteam Input設定が済んでいる。
- ホスト側が2つのコントローラー(参加人数+1個以上)を持っている。
- RPT対応タイトルをもっていること。
- 動かなくても泣かないで。
- すべての検証はWindowsOSで試したのでMacやLinuxやSteamOSではわかりません。情報希望。
- この検証が行われたのは、19/12/15~20/01/07,20/02/27~20/03/20,20/08/03~20/08/17,20/09/02,20/09/15~20/09/24,21/02/27,21/03/09(以降不定期)のStableとUnstable(ベータクライアント)のSteamクライアントおよびiOS版(バージョン調査なし)RPTでテストしたものです。
バージョンの差異があるので注意ください。 - 話し言葉、書き言葉が混在している著者の””メモのようなもの””となっていますのでご容赦ください。ゆるして。
- “年月日”表記は特別な記述がない限り、
yy/mm/dd
yyyy/mm/dd
と、表記しています。
まず予備知識 「DirectInput」と「XInput」の違い
コントローラーには「DirectInput」と「XInput」という入力形式があります。
小難しいことはわからないので省略しますが前者である「DirectInput」形式は、
- 昔から使われているDirectX向けのコントローラーなどの入力方式
- Xbox360のコントローラーより古いコントローラーはほぼ間違いなくこれ
- ゲーム起動前にコントローラーをPCに認識させておかないといけない
- 途中でコントローラーが抜けるとさし直しても使えない
(厳密には少し違うはず、後でおそらくの想像を書きます)
という感じです。そして後者の形式、「XInput」は、
- Xbox360やWinXP世代に生まれた同じくDirectX向けのコントローラーなどの入力方式
- マイクロソフトが出している現行ハードを含むコントローラーはすべてこの形式
- ゲーム起動前にさしてもいいし、ゲーム起動後でもいい(ホットプラグ)
- 途中でコントローラーが抜けてもさし直せば使える
ということで何故動かないゲームが有るのか?もうお気づきの方は居らっしゃると思いますが、
”DirectInput形式を採用したゲームはもれなく一緒にプレイができない”ということです。
先にことわっておきますが、それを解決する記事なのでここで終わりではありませんよ!
解決の手順
2人用のゲームで例を挙げると、
招待する側(ホスト)
- ゲームを起動する前にコントローラーを2つ接続しておく
- ゲームが起動したらタイトル画面かメニューで「2プレイヤー側コントローラー」をPCから外す
- 一緒にプレイするフレンドにRPT招待を送って受け取ってもらう
- あそべる。すごい。
招待を受ける側(クライアント)
- コントローラーをひとつだけつないで、RPT招待を送ってもらって受け取る
- あそべる。すごい。
以上です。
そもそもなぜうごくの?なぜうごかなかったの?
理屈(ただし想像)
ここからはほとんどが”おそらく”なのですが、RPTは以下のステップを踏んで動作させているはずです。
- クライアント側のコントローラー情報をホスト側が受け取る
実際にホスト側のSteaminputにはコントローラーが増えているのが確認できる。 - ホスト側のSteamInputにクライアント側コントローラー設定を個数分投げつける
コントローラーがホットプラグでつながっているが流石に設定はいじれない。 - ホスト側にデバイス情報をSteamInput経由で接続信号を流す
- クライアント側からボタンが押されたらSteamInputを経由してゲームにボタン情報を流す
問題なのは、DirectInput形式は”後刺しできない”ことです。SteamInputがゲーム側にコントローラーをつないでくれても、すでにゲームは立ち上がっているので意味がありません。DirectInputには多分切断自体は検出していなくて信号待ちが続くようですが、残念ながら一度外すとデバイス認識番号がズレるのかキーの送信情報番号がズレるなどの原因かなにかで全く反応しません。ならどうするか?ホスト側のコントローラーを物理的に増やして予めに確保しておいて途中で外し、RPT招待をして確保されている2プレイヤー側をジャックしてもらうということです。
まとめのまとめ
DirectInputのゲームは、ホスト側のコントローラー2つをつないでゲームを立ち上げタイトル画面かメニュー画面あたりで2P側のコントローラーをぶち抜いてRPTでフレンドを招待してエンジョイすればOKです。 触れるまでもないですが、XInput(または両方*1)形式を採用しているタイトルは、何も考えずにゲームを起動して一緒にプレイしたい友人にRPTの招待を飛ばしてください。
*1 XInputとDirectInputの両方を採用したタイトル(Rabi-Ribiをクライアント側でテスト)ではインデックス4項目の手順(解決の手順)を踏む必要がありました。
RPT対応タイトルが無料配布中!(2021年03月27日 08:00a.m.まで)
***配布終わりました***
有名な三葉機、「フォッカー Dr.I」も登場する第一次大戦の空を駆けるアーケードライクシューター。
受け取り方はこちらを参照ください。
-
Steamにて名作ラリーシム『DiRT Rally』が無料配布中!
ラリーシム『DiRT Rally』が無料配布中!
コントローラーとは関係のないおまけ
コントローラーのおはなしには全く関係はありませんが、
“DirectX9.0cを使っているタイトルだとなぜかお互いの画面でスタッタリング(画面のフレーム飛び、止まってるように見える状態)のような現象”が発生します。テストでは私がホストでほかの方は全員クライアントという形で行いました。使用したタイトルは他の方が感覚的に自信があるタイトルで『MBAACC』と『BBTAG』を使用しましたが感覚がどうなど関係ないぐらいにおかしな動作をしていました。後者のタイトルは多少4試合に数回程度(時間にして200~300秒あたり)でしたが、前者はとにかく不安定で1試合に数回から数十回もの頻度でスタッタリングが発生していました。
それの解決方法に関してまだまだ調査(2021年3月現在)をしていますが依然として見つかっていません。もし何かしらかの情報をお持ちの方がいたら、ぜひ、コメント欄から教えていただければ幸いです。