通知
すべてクリア
05/02/2024 12:37 am
マルチプレイにおいて、キャラクターの頭上にSteamユーザー名を表示したいと思っています。
以下のようにLocalUserNumを0にしているため、ClientTravelでロビーに人が集まっても全員同じ名前になります。(ユーザーAのPC上では全員ユーザーAの名前で表示され、ユーザーBのPC上では全員ユーザーBの名前で表示される)
UserDispName = IdentityInterface->GetPlayerNickname(0);
LocalUserNumを変えるにしても、「ClientTravelで人は増えたのをどう検知するのか」「どのActorが何番目なのかをどう判定するのか」パッと思い浮かばないのですが、これはどうするのが良さそうでしょうか?
05/02/2024 12:38 am
05/02/2024 12:39 am
(NotifyPlayerJoinedLobby
関数がUEにあることを前提としているけど、これがどういう関数なのか不明で且つ、ドキュメントに無いように見える。
「ロビーに参加した時にそれを知らせるRPC関数を作成し」とあるので、そのような関数を自作したのだと思うが、それをどうやったのかが分からず。)
05/02/2024 12:40 am
IOnlineSession::AddOnJoinSessionCompleteDelegate_Handle()
でJoinSesson成功時に呼び出されるデリゲート内でClientTravel()をしているので、そのタイミングでサーバー側で実行する関数を実行させることは可能。ただし、ClientTravel()完了後に実行にはならなそうな印象。
なお、それだけでいうとClientTravel()でキャラクターが増えると、サーバーとクライアントの両方のPCでBeginPlayが実行されるので、あとはHasAuthority時のみ処理をすればClientTravelで人が増えた時にサーバー側で処理をさせるのはできる気がした。
このとき、該当キャラのプレイヤーIDを取得してGetPlayerNickname()の引数に入れればうまくいくのだろうか。試してみる。プレイヤーIDがLocalUserNumのことなのかがちょっと気になっている。
05/02/2024 12:40 am