環境
・Unreal Engine4.20.3
Tickが動作しているActor一覧の確認
Console Commandの「dumpticks」でTickが動作しているActorやComponentの一覧が取得できます。
するとOutput Logに一覧が表示されます。
しかし、これだと通常のログと混ざって少し見にくいため、私はSession Frontendを使用しています。
Session FrontEndはWindow -> Developer Tools -> Session Frontendから開けます。
試しにThirdPersonTemplate(Blueprint)で動作を試してみます。
画像が見にくいですが、概ね見るとすれば赤枠で囲った範囲かと思います。
この中でも特にHUDを使用している人は少ないと思いますので、無駄にTickを走らせていることが分かります。
Tickを止める方法
①Blueprintの場合
Actor(例えばHUDやCharacterの場合)は
Actor Tickというカテゴリの中にStart with Tick Enabledというフラグがあるため
これをオフにすることで無効にできます。
同様にComponentの場合も
Component Tickというカテゴリの中にStart with Tick Enabledというフラグがあるため
これをオフにすることで無効にできます。
②C++の場合
今回はActorを継承して新規作成したクラスを例に見てみます。
さて、このActorのctor内で
PrimaryActorTick.bCanEverTick = true;
とあるので、これをfalseにするだけでこのActorのTickを無効にすることができます。
AExampleTickActor::AExampleTickActor()
{
PrimaryActorTick.bCanEverTick = false;
}
しかし、これには少し罠があります。
このActorを継承したBlueprintを作成しTickノードに何か処理を繋ぐとC++側もBlueprint側もTickが動いてしまいます。
ただし、Tickがゴーストノードの場合はTickが動くことはありません。
とはいえこんな不安な状態のまま開発を行いたくはありません。
その場合は、先程Blueprintで変更したのと同じStartWithTickEnabledをC++側からfalseにしてやりましょう。
AExampleTickActor::AExampleTickActor() { PrimaryActorTick.bCanEverTick = false; // BlueprintでActorTickカテゴリにあるフラグ PrimaryActorTick.bStartWithTickEnabled = false; }
これでこのActorのTickをしっかりと止めることができました。
追記
PrimaryActorTick.bCanEverTickのフラグですがAActorクラス内ではfalseになっています。
そのため、EmptyActorをLevelに配置した場合や
Actorを継承したBlueprintでもTickがゴーストノードの場合や削除されている場合はTickが呼び出されません。
明示的に呼び出しを無効化したい場合はStart With Tick Enabledをfalseにすることをオススメします。