アンリアる! C++入門編 ~対話形式で学ぶUnreal Engine~
BOOTHでUnreal Engine C++入門書を販売していますUnreal Engine上でC++を使って開発するために必要となる基礎知識を一冊の本にまとめた本です。 対話形式によるわかりやすい説明を目指しました。無料の試し読みも可能ですので、ぜひ読んでみてください!
[UE5] C++ Actorの実装

※一部画像は異なりますが、本記事の内容はUE4にも適用できます。

本記事では、Unreal Engineで、C++を用いてActorを実装する方法と、実装したActorを利用する方法について説明します。

※Unreal EngineでC++を使うためには、C++の導入(環境構築・プロジェクト設定)が必要です。
 導入していない場合は、以下の記事を参考にしてください。

[UE5] C++の導入方法
本記事では、Unreal EngineでC++を導入する方法と、C++ヘッダファイル・ソースファイル(C++クラス)を追加する方法を説明します。

Actorの実装

C++での実装

以下の手順で、Actorを実装するためのヘッダファイルとソースファイルを作成します
クラス名(Actor名)は、例としてMyActorとしています。

C++ソースファイルの作成手順(その1)

C++ソースファイルの作成手順(その2)

作成すると、ヘッダファイルとソースファイルには以下のコードが自動的に生成されています(コメントは省略しています)。
このコードには、Actorを実装するための必要最低限のコードが記述されています
なお、クラス名(Actor名)の頭に「A」を付ける決まりになっているため、この例では「AMyActor」というクラス名でコードが生成されています。

【ヘッダファイル(MyActor.h)】

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
    GENERATED_BODY()
	
public:	
    AMyActor();

protected:
    virtual void BeginPlay() override;

public:	
    virtual void Tick(float DeltaTime) override;

};

【ソースファイル(MyActor.cpp)】

#include "MyActor.h"

AMyActor::AMyActor()
{
    PrimaryActorTick.bCanEverTick = true;
}

void AMyActor::BeginPlay()
{
    Super::BeginPlay();
}

void AMyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

Blueprintとの比較

補足として、BlueprintでActorを実装する場合と比較します。
先ほど説明したC++で実装するための操作は、Blueprintにおける以下の操作と同じことを意味しています。

Blueprintでの実装(その1)

Blueprintでの実装(その2)

実装したActorの利用

C++で実装したActorは、Level上に配置します。
以下のとおり、C++で実装したActorを親クラスとして指定したBlueprintクラスアセットを作成し、作成されたActorをLevel上に配置して利用します。

C++で実装したActorの継承(その1)

C++で実装したActorの継承(その2)

C++で実装したActorの継承(その3)

補足

Blueprintで継承せずに、C++で作成したActorを直接Level上に配置することも可能です。
手順は以下の通りです。

C++ Actorの配置手順(その1)

C++ Actorの配置手順(その2)

ただし、この手順で配置したActorには、Scene Componentが追加されておらず、Actorを移動できません。
したがって、Componentを追加するためのコードを記述する必要があります。
(Componentを追加するための手順を示した関連記事は後述)

ソースコードの記述内容

今まで説明した手順で、C++のActorを実装し、それをLevel上に配置して利用できるようになりました。
ただし、これだけでは何の機能も持っていないため、ソースファイル・ヘッダファイルに対してソースコードを追記し、機能を追加します
主に、以下のようなソースコードを追加していくことになります。

【ヘッダファイル(MyActor.h)】

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/StaticMeshComponent.h"
#include "MyActor.generated.h"

UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
    GENERATED_BODY()

public:
    // メンバ変数の定義
    UPROPERTY(EditAnywhere)
    int MyVar = 10;

    // Componentの定義
    UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly)
    TObjectPtr< class UStaticMeshComponent > MyComp;

public:
    // コンストラクタの宣言
    AMyActor();     

protected:
    // イベント(BeginPlay)の宣言
    virtual void BeginPlay() override;    

public:
    // イベント(Tick)の宣言
    virtual void Tick(float DeltaTime) override;

    // メンバ関数の宣言
    UFUNCTION(BlueprintCallable)
    int MyFunc(int In1, int In2);
};

【ソースファイル(MyActor.cpp)】

#include "MyActor.h"

// コンストラクタの定義
AMyActor::AMyActor()
{
    PrimaryActorTick.bCanEverTick = true;

    // Componentの初期化
    MyComp = CreateDefaultSubobject(TEXT("MyComp"));
    RootComponent = MyComp;
}

// イベント(BeginPlay)の定義
void AMyActor::BeginPlay()
{
    Super::BeginPlay();
}

// イベント(Tick)の定義
void AMyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

// メンバ関数の定義
int AMyActor::MyFunc(int In1, int In2)
{
    return In1 + In2;
}

各コードの意味・記述内容について別記事で紹介します。

【宣伝】
Unreal EngineのC++は、一般的なC++にはない独自の仕様が多く、難易度が高いため、体系的に学ぶのが効率的です。
Colory Gamesでは、Unreal EngineのC++を使う人を対象とした入門書をBOOTHで販売しています
Unreal Engine上でC++を使って開発するために必要となる基礎知識を一冊の本にまとめています。
対話形式でわかりやすく、プログラミング未経験でも理解できる構成としており、体系的にUnreal Engine C++を学習できます。

UEFN Verse入門書 表紙 UEFN Verse入門書 サンプルページ

【商品ページ(BOOTH)】 https://colory-games.booth.pm/items/4734728