LoginSignup
6
3

More than 3 years have passed since last update.

[UE4]Spawn/SubLevel操作時のBeginPlay/EndPlay/Destroyedについて

Last updated at Posted at 2019-09-08

引っかかったのでActorの発生/破棄のイベントについて挙動を調べてみました。

UE4.23.0にて確認

はじめに

2019-09-08_17h21_35.png
Actorの発生/破棄のイベント

  • BeginPlay: レベルにActorが発生したときに呼ばれる
  • EndPlay: レベルからActorが取り除かれた時に呼ばれる
  • Destroyed: Actorが破棄された時に呼ばれる

2019-09-08_17h39_16.png
操作

  • Load/Unload StreamLevel: サブレベルを読み込む
  • Should Be Visible: ロードしたサブレベルのActorを表示する。(正確にはWorldにActorを追加する)
  • Open Level: レベルを移動する
  • Spawn/Destroy Actor: Actorを生成/破棄する

結果

サブレベルに配置したActor

2019-09-08_18h16_59.png
サブレベル上に配置している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が呼ばれる
    • → 2.Unload Stream Level : 何も呼ばれない
    • → 2.OpenLevel : 何も呼ばれない
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した場合

image.png
動的に生成します

操作手順によるイベント処理

  • 1.Spawn Actor : BeginPlayが呼ばれる
    • → 2.Destroy Actor : EndPlay-DestroyedDestroyedが呼ばれる
    • → 2.OpenLevel : EndPlay-LevelTransitionが呼ばれる
SpawnActor DestroyActor Level移動
BeginPlay
EndPlay ○:Destroyed ○:LevelTransition
Destroyed
  • Level移動して消された場合はDestroyedイベントは呼ばれません
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3