UE5/UE4 C++でアクター(Actor)の「Tick」を実行しないようにする(PrimaryActorTick.bCanEverTick、PrimaryActorTick.bStartWithTickEnabled、AActor::SetActorTickEnabled)
こちらを参考にさせていただきました。
・UE4/C++ Tick が来ない!そんなときのトラブルシュート備忘録
https://usagi.hatenablog.jp/entry/2017/07/05/164236
・UE4 無駄なTickを省く方法
https://papersloth.hatenablog.com/entry/2018/11/01/200000
公式ドキュメントはこちら。
・アクタのティック(Actor Ticking)
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Actors/Ticking/
まずはアクターのコンストラクタの「PrimaryActorTick.bCanEverTick」で制御する方法です。
こんな感じで記述します。
// コンストラクタ
ANewActor::ANewActor()
{// Tick が実行されないようにする
PrimaryActorTick.bCanEverTick = false;}
参考サイトには以下のような注意点があります。
このActorを継承したBlueprintを作成しTickノードに何か処理を繋ぐとC++側もBlueprint側もTickが動いてしまいます。
ただし、Tickがゴーストノードの場合はTickが動くことはありません。
とはいえこんな不安な状態のまま開発を行いたくはありません。
その場合は、先程Blueprintで変更したのと同じ「StartWithTickEnabled」をC++側から「false」にしてやりましょう。
というわけで「 PrimaryActorTick.bStartWithTickEnabled」も合わせて設定します。
// コンストラクタ
ANewActor::ANewActor()
{// Tick が実行されないようにする
PrimaryActorTick.bCanEverTick = false;
PrimaryActorTick.bStartWithTickEnabled = false;}
ちなみに「PrimaryActorTick.bCanEverTick」なのですが、
コンストラクタで「false」に設定した後に、再度「true」設定しても「Tick」が動くことはないようです。
なので、一時的に「Tick」を止めたい。という場合には「SetActorTickEnabled」関数を使います。
上記一時的に止める場合は「PrimaryActorTick.bCanEverTick」は「True」である必要があるので注意ですね。// アクターのTickを一時的に止める
TObjectPtr< AActor> aActor;
aActor->SetActorTickEnabled(fasle);
// Tick を再開
aActor->SetActorTickEnabled(true);
無駄に「Tick」が実行されると重くなる原因にもなるので注意して使っていきたいですね。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑