Unreal Engine 5で開発する過程で、少しハマった[継承したブループリントクラス]で[親ブループリントクラス]の[Tick]イベントが実行されない場合の対処法を備忘録的に投稿します。
[イベントグラフ]でイベントは無効
Unreal Engineの親クラスを継承して作成したブループリントの[イベントグラフ]には[PreConstruct][Construct]と[Tick]の3つの無効化されたイベントが追加されています。
ここで、恒例の「初見殺し」が発生するのですが、継承したブループリントクラスの[PreConstruct]イベントや[Construct]イベントが無効な状態でも、継承元のイベントは実行されます。
無効にしているのに、親クラスのイベントが発生するという普通に考えると理解が追い付かない設定なのですが、この[無効]というのはオーバーライドを示しています。
つまり、無効化されている[Event Construct]-[Parent Construct]ノードを有効にすると、親クラスの[Construct]イベントが無視されて子クラスの[Construct]が実行される仕組みになっています。
同様に無効化されている[Tick]イベントも無効化の状態ではオーバーライドがされないので親クラス側の動作になるので、実際に動作している子クラス側の設定などが反映されません。
そのため、期待した動作をしてくれない原因になります。子クラスで継承元の[Tick]イベントを使うためには[Event Tick]-[Parent Tick]を有効にする必要があります。
微妙に振る舞いが違う、このイベントが既定で[無効]になっている理由は分かりません。
しかし、個人的には「親クラスを継承して」作ったクラスで親クラスを対象にして実行される[Tick]イベントには少しハマりました。
まとめ
今回は、短い記事ですが、Unreal Engine 5で[継承したブループリントクラス]で[親ブループリントクラス]の[Tick]イベントが実行されない場合について書きました。
親クラスを継承して作成したクラスの[イベントグラフ]に追加される無効化されたイベント[PreConstruct]と[Construct]イベントは、有効化すると親クラスの同じイベントをオーバーライドすることができます。
[Tick]イベントは少し内容が違い、有効化すると継承したクラスの設定で振舞うようになります。
無効化した状態でも親クラスの[Tick]イベントが実行されますが、変数や関数などは[継承元クラス]として実行されてしまうので注意が必要です。
Unreal Engine で[継承したブループリントクラス]の[Tick]イベントが正しく実行されない人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。



