確認したバージョンは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))
{
// 省略
}
}
- RF_ClassDefaultObject
- このオブジェクトはクラスデフォルトオブジェクト(CDO)である。
- RF_ArchetypeObject
- このクラスオブジェクトは他のオブジェクトのためのテンプレートである。CDOのように取り扱われる。
【2023/08/07 追記】UObjectBaseUtility::IsTemplate()を使うと一発で判定できる。
// HasAnyFlags(RF_ClassDefaultObject | RF_ArchetypeObject)とほぼ同じ
if (/*not*/!IsTemplate())
{
// 省略
}