#memo

indiedev太郎

Superクラスについて

BeginPlay()関数の中に見かけがちなSuperクラスについて、標準のC++ではなく、UObject継承のクラスに提供されている何かっぽい

UCLASS()
class ATestClass_A : public AActor
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable, Category = "TEST")
	virtual FString C()
	{
		return TEXT("Called C() in TESTClass_A");
	}
};

UCLASS()
class ATestClass_B : public ATestClass_A
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable, Category = "TEST")
	virtual FString C() override
	{
		FString Text = TEXT("Called C() in TESTClass_B then -> ");
		Text += Super::C();
		return Text;
	}
};

UCLASS()
class ATestClass_C : public ATestClass_B
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable, Category = "TEST")
	virtual FString C() override
	{
		FString Text = TEXT("Called C() in TESTClass_C then -> ");
		Text += Super::C();
		return Text;
	}
}

このようなクラスと関数を用意して、UE側でATestClass_CオブジェクトでC()を実行してみる

https://i.gyazo.com/527b6f63e0286ced1d0f3e589d7de255.png

ここでATestClass_BからC()の実装を取り除いて実行してみる

https://i.gyazo.com/4f407be19fb12d64ad6606832c300351.png

まとめ
  • 一つ上の親のクラスがSuperクラス
  • UObjectどうしの多重継承は禁止されているので、Superクラスは一つに絞られる
  • 実装がないクラスの関数は飛ばされる(上記状態だとATestClass_A::C()は2回呼ばれたりはしない)

かいてた

Unreal Engine | アンリアルでのオブジェクト処理