ハウツー

Steamの『Remote Play Together(RPT)』で起こるクライアント側のコントローラー問題を解決!【20/09/25追記】

投稿日:2020年1月3日 更新日:

一部タイトルで発生する、「クライアント側のコントローラーが効かない」問題を”おそらく”解決できる方法がわかりました。おそらく。

すべてのSteamユーザーをイラつかせてくれたり喜ばせたりしている『Remote Play Together』(以降RPT)で「クライアント側のコントローラーが効かない」問題の割とあっさり解決できることがわかったので、Steamユーザーに向けて専門用語を類も含めてそこそこわかりやすく雑にまとめました。

テストした環境(補足が無い限りホスト側)

パソコン本体

驚くほど古いPCですがRPTにおいては1台目を除いて問題なく動作します。

  • 1台目
    i7-2630QM
    CPU内の機能を利用(iGPU)
    実装4GB(仮想込み16GB)
    Win7
  • 2台目
    i7-3200
    GeForce 560
    実装4GB(仮想込み16GB)
    Win8.1

 

周辺機器

大前提

  • 文責TTTT、ならびに当サイトその系列サイトは”すべてにおいて一切の責任をおわないもの”とします。
  • Big Pictureでうまくいかなかった、タイトルによってうまく動作しなかった人向け。
  • 最低限、両者ともにSteam Input設定が済んでいる。
  • ホスト側2つのコントローラー(人数によって個数が増える)を持っている。
  • RPT対応タイトルをもっていること。
  • 動かなくても泣かないで
  • すべての検証はWindowsOSで試したのでMacLinuxSteamOSではわかりません。情報希望
  • この検証が行われたのは、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のStableとUnstable(ベータクライアント)のSteamクライアントおよびにRPTでテストしたものです。
    バージョンの差異がある可能性があるので注意ください。

まず予備知識  「DirectInput」と「XInput」の違い

コントローラーには「DirectInput」と「XInput」という入力形式があります。
小難しいことはわからないので書きませんが前者である「DirectInput」形式は、

  • 昔から使われているDirectX向けのコントローラーなどの入力方式
  • Xbox360のコントローラーより古いコントローラーはほぼ間違いなくこれ
  • ゲーム起動前にコントローラーをPCに認識させておかないといけない
  • 途中でコントローラーが抜けるとさし直しても使えない
    (厳密には少し違うはず、後でおそらくの想像を書きます)

という感じです。そして後者の形式、「XInput」は、

  • Xbox360やWinXP世代に生まれた同じくDirectX向けのコントローラーなどの入力方式
  • マイクロソフトが出している現行ハードを含むコントローラーはすべてこの形式
  • ゲーム起動前にさしてもいいし、ゲーム起動後でもいい(ホットプラグ)
  • 途中でコントローラーが抜けてもさし直せば使える

ということで何故動かないゲームが有るのか?もうお気づきの方は居らっしゃると思いますが、

”DirectInput形式を採用したゲームはもれなく一緒にプレイができない”ということです。
先にことわっておきますが、それを解決する記事なのでここで終わりではありませんよ!

解決の手順

2人用のゲームで例を挙げると、

招待する側(ホスト)

  1. ゲームを起動する前にコントローラーを2つ接続しておく
  2. ゲームが起動したらタイトル画面かメニューで「2プレイヤー側コントローラー」をPCから外す
  3. 一緒にプレイするフレンドにRPT招待を送って受け取ってもらう
  4. あそべる。すごい。

招待を受ける側(クライアント)

  1. コントローラーを一つだけつないで、RPT招待を送ってもらって受け取る
  2. あそべる。すごい。

以上です。

そもそもなぜうごくの?なぜうごかなかったの?

理屈(ただし想像)

ここからはほとんどが”おそらく”なのですが、RPTは以下のステップを踏んで動作させているはずです。

  1. クライアント側のコントローラー情報をホスト側が受け取る
    実際にホスト側のSteaminputにはコントローラーが増えているのが確認できる。
  2. ホスト側のSteamInputにクライアント側コントローラー設定を個数分投げつける
    コントローラーがホットプラグでつながっているが流石に設定はいじれない。
  3. ホスト側にデバイス情報をSteamInput経由で接続信号を流す
  4. クライアント側からボタンが押されたらSteamInputを経由してゲームにボタン情報を流す

問題なのは、DirectInput形式は”後刺しできない”ことです。SteamInputがゲーム側にコントローラーをつないでくれても、すでにゲームは立ち上がっているので意味がありません。DirectInputには多分切断自体は検出していなくて信号待ちが続くようですが、残念ながら一度外すとデバイス認識番号がズレるのかキーの送信情報番号がズレるなどの原因かなにかで全く反応しません。ならどうするか?ホスト側のコントローラーを物理的に増やして予めに確保しておいて途中で外し、RPT招待をして確保されている2プレイヤー側をジャックしてもらうということです。

ジャックして何故動くかも想像ですが、単純明快に同じSteamInputを経由しているので都合のいいwrapper(プログラムにおける中間管理職)で動作させているという感じで納得しましょう。してね。

整合性を取れていないように見えるが、クライアント側が本来のホスト側2を乗っ取っているので問題なし。

シンプルにコントローラー一つずつでつないだ場合の図解。どう転んでも後刺しは不可能なのでコントローラーは一つしか認識しない。

※細かいことはここここあたりに色々書かれているはずです。

まとめのまとめ

DirectInputのゲームは、ホスト側のコントローラー2つをつないでゲームを立ち上げタイトル画面かメニュー画面あたりで2P側のコントローラーをぶち抜いてRPTでフレンドを招待してエンジョイすればOKです。 触れるまでもないですが、XInput(または両方*1)形式を採用しているタイトルは、何も考えずにゲームを起動して一緒にプレイしたい友人にRPTの招待を飛ばしてください。

*1 XInputとDirectInputの両方を採用したタイトルRabi-Ribiをクライアント側でテスト)ではインデックス4項目(解決の手順)の手順を踏む必要がありました

 

コントローラーとは関係のないおまけ

コントローラーのおはなしには全く関係はありませんが、
“DirectX9.0cを使っているタイトルだとなぜかお互いの画面でスタッタリング(画面のフレーム飛び、止まってるように見える状態)のような現象”が発生します。テストでは私がホストでほかの方は全員クライアントという形で行いました。使用したタイトルは他の方が感覚的に自信があるタイトルで『MBAACC』と『BBTAG』を使用しましたが感覚がどうなど関係ないぐらいにおかしな動作をしていました。後者のタイトルは多少4試合に数回程度(時間にして200~300秒あたり)でしたが、前者はとにかく不安定で1試合に数回から数十回もの頻度でスタッタリングが発生していました。

 

それの解決方法に関してまだまだ調査をしていますが依然として見つかっていません。もし何かしらかの情報をお持ちの方がいたら、ぜひ、コメント欄から教えていただければ幸いです。

-ハウツー 機種:,

Copyright© ゲームダ , 2020 All Rights Reserved.