BLOGブログ

2024.08.07UE5UE/ C++UE/ Network

[UE5] 切断したプレイヤーの Pawn をサーバーでは残す

執筆バージョン: Unreal Engine 5.3

こんにちは!マルチプレイヤーゲームを作っていて、こんなことを思ったことはないでしょうか?
「マルチプレイ中、切断したプレイヤーがいても Pawn は残したいな~」

ゲームのルールや状況などにもよりますが、なんらかの理由でサーバーから切断したプレイヤーの Pawn を
サーバーや他のプレイヤー環境では残したいシチュエーションがあります。
デフォルトでは、あるクライアントが切断すると、サーバー上の切断したクライアントの Pawn も Destroy されるため、
他のクライアント環境でも Pawn がいなくなります。

次のサンプルでは、右画面のクライアントが切断しています。

すると、切断していない左側のプレイヤー画面も1人になってしまいました。寂しい。

これは、APlayerController の PawnLeavingGame() が実行される前に
UnPossess() することで対応することが可能です。

例えば、APlayerController を継承した以下のようなコードを書いてみましょう:

上記のコードをビルドしたのち、エディタ上で AMyPlayerController を継承した
Blueprint クラス BP_MyPlayerController を作成し、
UnPossessPawnIfClientLeavingGame プロパティを True にします。

それでは、PlayerController を BP_MyPlayerController に差し替えたレベルで、挙動を試してみましょう:

右画面のプレイヤーが切断しても、切断していない左画面では Pawn を残すことができましたね!
これでもう寂しくない!

マルチプレイヤーゲームでは、さまざまなシチュエーションで
プレイヤーの意図する切断、意図しない切断の両方が発生するため、その際のケアが必要となります。
もし Pawn を残す実装を作りたい場合に、この記事が参考になると幸いです。