お世話になっております。
GameInstanceにPlayerControllerの配列を作り、レベルを跨いで使用しようとしたのですが、レベルを跨ぐと配列の中身が全て空になってしまいます。(作成したindexはある模様)
PlayerControllerはCreatePlayerをした際の出力したものを格納しており、それをレベルを跨いでも保持しておきたいのですが、普通にinstanceに格納すると、レベルを跨いだら空になってしまうようです。
instanceはレベルを跨いでデータを保持できる認識だったのですが、PlayerControllerの場合、挙動が変わったりしますでしょうか?
PlayerControllerはActorの一種であり、そのインスタンスの所有管理権はLevel側にあります
LevelはUnloadされた時点で自分の所有するActorをすべて破棄します
GameInstanceの変数に格納できているのはあくまでも参照だけですので、参照元(Actor)が破棄されれば使えなくなります
PlayerControllerはActorの一種であり、その管理所有権はLevelにあります
LevelはUnloadされた時点で、所有するActorをすべて破棄します
GameInstanceの変数に格納できているのはインスタンスへの参照のみであり、参照元が破棄されれば当然使えなくなります
ご回答頂き、ありがとうございます!
なるほど、インスタンスに格納しているのは参照のみなのですね…。
やりたい内容としてはレベルA(パーシスタント)で作成したプレイヤーをレベルB(パーシスタント)で減らしたいのですが、インスタンスでコントローラーを受け渡す以外に方法はありますでしょうか?
UnloadしてしまうとCreatePlayerで作成したプレイヤーは削除できないでしょうか?
Persistent間の移動でも、CreatePlayerで作成したPlayerController(ローカルマルチ用)は移動先のLevelにて再生成されます
ですので、元の数は保たれるはずです
やりたい内容としてはレベルA(パーシスタント)で作成したプレイヤーをレベルB(パーシスタント)で減らしたい
移動先で要らないことがわかっているなら、移動前に移動元Level上で減らしてしまうのが一番かと思いますが、ローカルプレイヤー(Player0)以外削除していい、というパターンであれば、PlayerID=0以外のPlayerControllerをRemovePlayerで削除してしまうのが良いかと思います
それ以外(任意のPlayerを減らしたい)だと移動先では判断がつかない可能性があります
再生成されている以上、PlayerIDが一致するかはわからないと思いますので
参考
ご返信頂き、ありがとうございます!
なるほど、移動先では再生成されるものの、PlayerIDが一致するとは限らないのですね…。
レベル毎に生成、削除を行い、レベル遷移でプレイヤー数を引き継がない形で試してみようと思います。
ご教授頂き、ありがとうございました。