Help us understand the problem. What is going on with this article?

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

引っかかったので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イベントは呼ばれません
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away