引っかかったのでActorの発生/破棄のイベントについて挙動を調べてみました。
Unload Stream Levelした時ってActor::Destroy来ないの……
— com04 (@com04) August 31, 2019
EndPlay(Remove From World)しか来ないの……
UE4.23.0にて確認
はじめに
- BeginPlay: レベルにActorが発生したときに呼ばれる
- EndPlay: レベルからActorが取り除かれた時に呼ばれる
- Destroyed: Actorが破棄された時に呼ばれる
- Load/Unload StreamLevel: サブレベルを読み込む
- Should Be Visible: ロードしたサブレベルのActorを表示する。(正確にはWorldにActorを追加する)
- Open Level: レベルを移動する
- Spawn/Destroy Actor: Actorを生成/破棄する
結果
サブレベルに配置したActor
サブレベル上に配置しているActorを、サブレベル操作行った場合
操作手順によるイベント処理
- 1.Load Stream Level : 何も呼ばれない(この時点ではActorはWorldに登録されていない)
- → 2.Should Be Vislble: ON : BeginPlayが呼ばれる
- → 3.Should Be Vislble: OFF : EndPlay-RemoveFromWorldが呼ばれる(保持している変数はクリアされない)
- → 4.Should Be Vislble: ON : BeginPlayが呼ばれる(変数が残ってる)
- → 3.Unload Stream Level : EndPlay-RemoveFromWorldが呼ばれる
- → 3.OpenLevel : EndPlay-LevelTransitionが呼ばれる
- → 3.Should Be Vislble: OFF : EndPlay-RemoveFromWorldが呼ばれる(保持している変数はクリアされない)
- → 2.Unload Stream Level : 何も呼ばれない
- → 2.OpenLevel : 何も呼ばれない
- → 2.Should Be Vislble: ON : BeginPlayが呼ばれる
LoadStreamLevel | UnloadStreamLevel | ShouldBeVisible-ON | ShouldBeVisible-OFF | Level移動 | |
---|---|---|---|---|---|
BeginPlay | ○ | ||||
EndPlay | (ShouldBeVisible-ONされている場合)○:RemoveFromWorld | ○:RemoveFromWorld(変数はクリアされない) | ○:LevelTransition | ||
Destroyed |
- サブレベル操作ではDestroyedが呼ばれません
- LoadしたサブレベルをShould Be VisibleでON → OFF → ONにした場合、BeginPlayが再度呼ばれます
- 内部変数は保持されたままです
- UnloadStreamLevelした場合は変数はクリアされます
Spawnした場合
操作手順によるイベント処理
- 1.Spawn Actor : BeginPlayが呼ばれる
- → 2.Destroy Actor : EndPlay-Destroyed → Destroyedが呼ばれる
- → 2.OpenLevel : EndPlay-LevelTransitionが呼ばれる
SpawnActor | DestroyActor | Level移動 | |
---|---|---|---|
BeginPlay | ○ | ||
EndPlay | ○:Destroyed | ○:LevelTransition | |
Destroyed | ○ |
- Level移動して消された場合はDestroyedイベントは呼ばれません