[UE4] CharacterのTickの依存関係を制御する際の注意点


時間のない人やTickの順序に関して知っている人はこれだけ守っていただければよいかと思います。

ルール: SkeletalMeshのTickGroupは、Tickの依存関係設定などによってSkeletalMesh自身が持つTickGroupから変更されないようにする

Tickの依存関係を独自設定してこのルールを破ってしまわないよう注意してください。SkeletalMeshのTickGroupが初期設定と異なる場合、そのMeshのアニメーション処理などは全てメインスレッドでの処理となります。例えあなたが32コアのCPUを持っていても、たった1コアでアニメーションのUpdateもEvaluationも処理されることになるのでお気をつけください。

※以前、上記のルールを「SkeletalMeshのTickGroupはTG_PrePhysicsでないとならない」と記載しておりました。これはSkeletalMeshのTickGroupがデフォルトではTG_PrePhysicsだからなのですが、独自のキャラクターを作成した場合このデフォルト値を変更できるため、TG_PrePhysicsに限定するのは誤っているとのご指摘を頂き確かにそれは正しいため、上記文言を変更いたしました。大変失礼いたしました。

以下では、上の注意点を説明するために、Tickの順序に関してのおさらいと、上記ルールの理由をご説明します。

Tickに関してのおさらい

Tickとは

UE4はレベル、Actor、Componentが毎フレーム呼び出す処理を記述することができ、これをTick()と読んでいます。

Tick Groupとは

各Tickがゲームの処理の中のどのタイミングで呼び出されるかを指定するために、Tick Groupという設定があります。

各種Tick Groupの一覧

enum ETickingGroup
{
    TG_PrePhysics UMETA(DisplayName="Pre Physics"),
    TG_StartPhysics UMETA(Hidden, DisplayName="Start Physics"),
    TG_DuringPhysics UMETA(DisplayName="During Physics"),
    TG_EndPhysics UMETA(Hidden, DisplayName="End Physics"),
    TG_PostPhysics UMETA(DisplayName="Post Physics"),
    TG_PostUpdateWork UMETA(DisplayName="Post Update Work"),
    TG_LastDemotable UMETA(Hidden, DisplayName = "Last Demotable"),
    TG_NewlySpawned UMETA(Hidden, DisplayName="Newly Spawned"),
    TG_MAX,
};

アクターのTickのTick Groupの設定箇所

各種Tick Groupの中で、どのような順序で各オブジェクトのTickが呼び出せれるかというと、そちらは基本的にはランダムと考えて良いのですが、その詳細をCom04さんが下記スライドに説明してくださっておりますのでそちらご参照ください。(QiitaはSlideShare埋めこめねえのかよおおおおおお!!!!!)