CommonUIで複数のプレイヤーが同時にカーソルを動かす画面の実装について

お世話になっております。

CommonUIプラグインを使用してUI開発に取り組んでおります。

格闘ゲームのキャラクター選択時において、複数のプレイヤーがそれぞれ同時にカーソルを移動させる際にどのような実装が良いか検討しております。

CommonUIを使用する場合は基本的にカーソル操作はナビゲーションに任せつつ、フォーカスが当たったUIに対してアニメーション再生したりOnClickでのイベント処理を行う流れと認識しております。

この場合に複数プレイヤーの場合、ナビゲーション移動やフォーカス処理に関してマルチプレイヤー時の挙動はCommonUIでは想定されていない形となりますでしょうか?

[Attachment Removed]

お世話になっております。

CommonUI = ナビゲーション → フォーカス → アニメーション/OnClick という流れは、シングルプレイヤー向けメニューとしては正しいです。一方で、エンジンソースを見る限り、マルチローカルプレイヤーは完全に想定外ではなく、基盤は用意されています。ただし、格闘ゲームのキャラクター選択のような「複数カーソルが同一画面を同時に自由移動する」用途としては、エンジンの提供する機能でそのままで実現するのが難しい(CommonUIのユースケースとしてはややイレギュラー)というのが実態です。そのため、CommonUI+カスタム実装というのが現実的な実装パターンになってくるかと思います。

具体的には、CommonUI はレイアウトに使い、カーソルと選択ロジックは自前にするというのが上記仕様を満たすための方針となります。各プレイヤーの入力はPlayerController/Enhanced Input で取得し、カーソル位置の更新や入力状態の管理も独自に管理して頂くことになります。CommonUIの利用想定からやや外れており提供する機能が仕様とマッチしない部分があるため実装コストが高いですが、自由度が高い方式です。

別案としてCommonUIを極力生かす方針であれば、Virtual Pointer を利用することでCommonUIの機能を活用することができます。Virtual Pointer はD-Pad入力によるフォーカス連動モード(ShouldLinkCursorToGamepadFocus)というよりは、アナログ移動によるフリーカーソルモード(CommonUI.EnableVirtualPointer=1)での想定となるため、仕様から外れる事になりますが、CommonGameViewportClient を使用して全ローカルプレイヤーを作成し、PlatformUser とコントローラを正しくマッピングすることで、同一画面内でのキャラクター選択を実現します。このケースでは、CommonUI の入力ルーティング、Virtual Pointer、InputMode 管理をそのまま利用できますが、ボタンの位置検出や入力はActionRouter 経由で受け取るようにするなど、カスタム実装も必要となります。

いずれの方針にしても CommonUI の機能は一部利用のみとなり独自実装が必要になってくるため、CommonUIの機能制限をご認識頂いた上で仕様に沿った実装を行って頂けますと幸いです。

[Attachment Removed]

ご確認いただきありがとうございます。

CommonUI単体ではマルチプレイヤーのカーソル移動が現状難しい旨承知いたしました。

また、VirtualPointerの利用に際してもアドバイスいただきありがとうございます。

この辺りを調査しつつ実装に取り組んでまいります。​

[Attachment Removed]