fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++でアクター(Actor)の「Tick」を実行しないようにする(PrimaryActorTick.bCanEverTick、PrimaryActorTick.bStartWithTickEnabled、AActor::SetActorTickEnabled)

C++でアクター(Actor)のTickを実行しないようにする方法です。

こちらを参考にさせていただきました。

・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」関数を使います。

// アクターのTickを一時的に止める
TObjectPtr< AActor> aActor;
aActor->SetActorTickEnabled(fasle);

// Tick を再開
aActor->SetActorTickEnabled(true);

上記一時的に止める場合は「PrimaryActorTick.bCanEverTick」は「True」である必要があるので注意ですね。

無駄に「Tick」が実行されると重くなる原因にもなるので注意して使っていきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/698-6ebe0e93

TRACKBACK

PREV | PAGE-SELECT | NEXT