誰が、いつ、あの俳優を殺すのか。
久しぶりのUE4記事です(汗)
本日は
あんまり使わない部類の「EventEndPlay」Nodeについて調べてみました。
これ↓。
これと対なる「EventBeginePlay」に関しては、良く使うのでそんなに触れません。
まずは概要。
【ざっくり概要】
EventBeginePlay:最初に呼ばれるイベント
EventEndPlay:最後に呼ばれるイベント
EventBeginePlayに関しては「最初」と書きましたが、厳密には最初の方という表現が正しいです。ClassBlueprintであれば「ConstructionScript」が最初に呼ばれます。LevelBlueprintであれば「EventBeginPlay」が最初に呼ばれます。
EventEndPlayに関しては「最後」と書きましたが、
上記図にあるように、終了要因が引数で渡されるため、呼ばれるタイミングは一意ではありません。ですが、EventEndPlayを受信したClassBlueprint、もしくはLevelBlueprintは「活動停止状態」となります。
ここから本題。
1.殺害動機は?
引数で渡される「EndPlayReason」は読んで字のごとく、終了要因を示します。
それぞれの要因によって当該Classにイベントを発行します。
----------------------------------------------------------------------------------
ActorDestroyed :ActorがDestroyされた時
LevelTransition :Level遷移時
EndPlayInEditor :エディタ実行中に停止された時
RemovedFromWorld :Worldからいなくなった時
Quit :アプリケーション終了時
----------------------------------------------------------------------------------
「ActorDestroyed」は『DestroyActor』などで対象となるActorを破棄した際に発生。
「LevelTransition」は『OpenLevel』などでPersistantLevelの切替が発生した時に発生。
「EndPlayInEditor」はエディタからのアプリケーション実行中に停止ボタンを押すと発生。
「RemovedFromWorld」は『UnloadStreamLevel』などでSublevelをアンロードした際に発生。
その際、アンロードしたSublevel、またはSublevelに配置されていたActorに発生。
「Quit」はエディタ実行ではない、パッケージしたアプリケーションの実行中にアプリケーション終了した際に発生。エディタ実行中には発生しない(standalone起動でも未発生)。
2.加害者は?
次にだれがEventEndPlayを発行するのか。
以下はイベント発行元のクラス名を示す。
----------------------------------------------------------------------------------
ActorDestroyed :AActorクラス
LevelTransition :UEditorEngineクラス
EndPlayInEditor :UEditorEngineクラス
RemovedFromWorld :UWorldクラス
Quit :UGameEngineクラス
----------------------------------------------------------------------------------
Engine側の上位クラスから発行されているのが分かる。
ちなみに「ActorDestroyed」に関しては自身に対して『EventEndPlay』を発行している。正確には『DestroyActor』を受信したら『EventEndPlay』を自身に対して発行する仕組み。ダイイングメッセージみたいな。
3.殺害動機に複数存在するか?
存在する。正しくは、同一Actorに対して異なる終了要因で複数回の『EventEndPlay』が発行されることがある。パターンが相当数存在するので全ては追いきれなかったが、注意すべきとして、「複数回呼ばれることがある」ということを意識しておきたい。
4.まとめ
ぶっちゃけ、あんまり使う機会はない!
でもちょっと便利。複数回呼ばれることにはご注意を。