LoginSignup
0
0

【UE5】そのUObjectがCDOかどうかを調べる

Last updated at Posted at 2022-09-13

確認したバージョンはUE5.0.3です。

よく忘れる上に、ググってもなかなか出てこないので自分メモ。

UMyActorComponent::UMyActorComponent(const FObjectInitializer& InObjectInitializer)
    : Super(InObjectInitializer)
{
    // CDOじゃない場合だけデリゲートを追加する (例)
    if (/*not*/!HasAnyFlags(RF_ClassDefaultObject))
    {
        OnComponentActivated.AddUObject(this, &UMyActorComponent::OnActivated);
        // 注:これはあくまでもサンプル。
        // デリゲートを追加するなら、コンストラクタより InitializeComponent()などでやるべき。
    }

    // RF_ArchtypeObjectとのORで判定している例もある
    if (/*not*/!HasAnyFlags(RF_ClassDefaultObject | RF_ArchetypeObject))
    {
        // 省略
    }
}

以下、公式ドキュメントのEObjectFlagsより

RF_ClassDefaultObject
このオブジェクトはクラスデフォルトオブジェクト(CDO)である。
RF_ArchetypeObject
このクラスオブジェクトは他のオブジェクトのためのテンプレートである。CDOのように取り扱われる。

【2023/08/07 追記】UObjectBaseUtility::IsTemplate()を使うと一発で判定できる。

    // HasAnyFlags(RF_ClassDefaultObject | RF_ArchetypeObject)とほぼ同じ
    if (/*not*/!IsTemplate())
    {
        // 省略
    }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0