お世話になっております。
Windows PCタイトルにおける PlayStationコントローラー対応について確認させてください。
現在、Windows PC向けに WinDualShockプラグインを利用しており、PlayStationコントローラー対応は LibScePadベースの経路に依存しています。
ただし、確認している範囲では、LibScePadは一般的な Bluetooth接続の DUALSHOCK4 をサポートしていない認識です。
(ここでいう一般的な Bluetooth接続とは、USBワイヤレスアダプター経由ではない、PC標準の Bluetooth接続を指しています)
そのため、Windows上で一般的な Bluetooth接続を行った DUALSHOCK4を、ゲーム側で正しく認識できない状況があります。
なお、以下の接続形態については問題なく動作しています。
- USB接続の DUALSHOCK4
- USBワイヤレスアダプターを利用して Bluetooth接続された DUALSHOCK4
- USB接続の DualSense
- Bluetooth接続の DualSense
Steamのフルコントローラーサポート要件も踏まえると、一般的な Bluetooth接続の DUALSHOCK4にも対応したいと考えています。
そのため、LibScePad / WinDualShockに依存せず、Windows PC上で一般的な Bluetooth接続の DUALSHOCK4をサポートするにあたり、Epicとして推奨される方法があるか確認したいです。
もし推奨される実装方針やベストプラクティスがあれば、ご教示いただけますと幸いです。
よろしくお願いいたします。
[Attachment Removed]
お世話になっております。
まず、ご認識のとおりです。WinDualShock が使っている Sony の libScePad は、PC 標準の Bluetooth 接続の DUALSHOCK 4 に対応していません。対応しているのは USB 接続と、公式の USB ワイヤレスアダプター経由だけです。これは Sony 側のライブラリの仕様なので、Epic 側で直すことはできません。DualSense の Bluetooth が動いて DUALSHOCK 4 が動かないのも、同じ理由です。
その上で、対応の方法をいくつかご案内します。
Steam のタイトルであれば、Steam Input を使うのが一番確実で早い方法です。Steamworks の設定で DUALSHOCK 4 を Steam Input にオプトインすると、Bluetooth 接続の DS4 を Steam 側が処理し、ゲームからは XInput 相当のコントローラーとして認識されます。ゲーム側の追加実装はほぼ不要で、Steam ストアのコントローラー対応表記でも Bluetooth を含めて申告できます(現在は有線/Bluetooth を接続方式ごとに申告します。なお公式アダプターは「USB 扱い」です)。
ただし、Steam Input を有効にしたコントローラーは Steam が占有し、ゲームには仮想の Xbox コントローラーとして見えるため、そのコントローラーは WinDualShock(libScePad)経路では認識されなくなります。ボタン表示を出し分けたい場合は、Steamworks SDK の ISteamInput で実際の機種を取得してください。「DUALSHOCK 4 だけ Steam Input を使い、DualSense は従来どおりネイティブで扱う」といった構成も可能です。
Steam 以外でも対応が必要な場合は、標準の RawInput プラグインの改修か、独自の入力デバイスプラグインの実装が必要になります。DS4 は Bluetooth 接続時に USB とレポート形式が異なるため、そのままでは正しく動きません。おおよそ次の対応が必要です。
・Bluetooth では最初は簡易レポート(0x01)だけが送られ、特定のフィーチャーレポート(0x02/0x05)を読み出すと拡張レポート(0x11)に切り替わる
・拡張レポートは USB のレポートに対して先頭が +2 バイトずれている
・出力レポート(振動・ライトバー)には CRC-32 の付与が必要
DS4 の HID プロトコルはコミュニティで広く公開されており(psdevwiki、Linux カーネルの hid-playstation ドライバー、SDL の hidapi など)、参考にできます。この方法は Sony のライセンスや機密情報は不要ですが、実装・保守・QA はタイトル側のご負担になります。
UE5.4 には Microsoft GameInput ベースの「Game Input for Windows」プラグイン(Experimental)が含まれており、設定次第で PlayStation コントローラーを扱えます。ただし 5.4 時点ではソースビルドと GDK のセットアップが必要で、Bluetooth 接続の PlayStation コントローラーで入力が取得できないという報告もあります。そのため現時点では本件の解決策としては推奨していません。今後のリリースで改善が進んでいるため、エンジンを更新される際に改めてご評価いただくのがよいと思います。
かんたんにいうと、Steam のフルコントローラーサポート要件(Bluetooth の DUALSHOCK 4 を含む)を満たすことが目的でしたら、Steam Input の利用が推奨かつ最短です。Steam に依存しないネイティブ対応が必要な場合は、RawInput の拡張または独自 HID 実装をご検討ください。なお、libScePad 自体への Bluetooth DS4 対応の追加は Sony 側の領域になりますので、必要でしたら Sony(DevNet)へのフィードバックもあわせてご検討ください。
お手数ですが、よろしくお願いします。
[Attachment Removed]
お世話になっております。
ご回答ありがとうございます。
ご案内いただいた内容をもとに確認を行い、SteamInput有効時にコントローラー識別が正常に行えることを確認できました。
今回の確認結果を踏まえ、Windows PC版における一般的な Bluetooth接続 DUALSHOCK 4への対応については、Steam版では Steam Inputを前提とする方針で検討を進めたいと思います。
大変参考になりました。ありがとうございました。
[Attachment Removed]