【UE4】PlayerController削除の仕方と注意すべきこと
目次
削除したくなった理由
マルチプレイ対応ゲームを実際に制作してみて、「CreatePlayer」にて生成したプレイヤーをあの世に葬り去りたいという欲が生まれてきました。
調べても情報が出てこなかったので質問してみました。
PlayerControllerを削除したい - UE4 AnswerHub
上記回答によると「RemovePlayer」を使用することでプレイヤーをコントローラ毎削除することが出来るようです。
生成したPlayerControllerは確保しろ!
しかし、単にRemovePlayerを使用しても、何故かPlayerControllerが削除されないという事案が発生しました。
「取得に時間がかかっているのか?」「-1指定でCreatePlayerしているのが悪いのか?」等の方法を試しても解決に至らなかったので、再び質問してみた所...
RemovePlayerでPlayerControllerが削除されない - UE4 AnswerHub
回答によると、
PlayerControllerのNetRoleが"ROLE_Authority"が以外だった場合はPlayerControllerが削除されない可能性があります。
別レベルで作成されたPlayerControllerはNetRoleが違うものが設定されている可能性もあります。特にOpenLevelでパーシスタントレベルを変更した際にはご注意ください。
という事で、 どうやらPlayerControllerの持つ情報により取得が意図する状態で行えていないことが原因のようでした。
しかし!
回答者様の検証BPでも行っていますが、CreatePlayerで生成したPlayerControllerを配列内に格納し、RemovePlayer時に取り出しています。
私も同じように予め配列内に確保しておき、RemovePlayerをしてみた所、何の問題もなく正常に全てのPlayerControllerを削除することが出来ました!
つまり、
「GetPlayerControllerで取得できないのなら初めから確保しておけば無問題」
ということでした。
よくよく考えてみれば、後で削除などの操作を行うものを逐一再取得とか非効率といいますか、無駄と言いますか。初めから手元に持っておけばよかったんですね。
まとめ
CreatePlayerで生成したPlayerControllerは確保しておき、RemovePlayerで削除しよう!