【Unreal C++】①C++クラス作成&Component追加【UE4】
だいぶUnreal C++に慣れてきたので、備忘録として書いていこうと思います。
ver4.18を使用しています。
C++クラス作成
新しいC++クラスの追加は「コンテンツブラウザの新規追加→新しいC++クラスを追加→親クラスを選択→名前をつける→クラスを作成」で作成できます。
親クラスにActorを選択し、hogeActorと名前をつけました。
hoge.h
#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "hogeActor.generated.h" UCLASS() class hogeProject_API AhogeActor : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties AhogeActor(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; };
以上のコードは作成時に自動的に書いてくれています。
ちなみにver4.15からの仕様変更でCoreMinimal.hのincludeが必須に
詳しくは↓
miyahuji111.hatenablog.com
.cpp
#include "hogeActor.h" // Sets default values AhogeActor::AhogeActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; } // Called when the game starts or when spawned void AhogeActor::BeginPlay() { Super::BeginPlay(); } // Called every frame void AhogeActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); }
cppの方も以上のコードが作成時に自動的に書いてくれています。
PrimaryActorTick.bCanEverTick をtrueにしておくと、Tick処理が呼び出されます。
必要ないときはfalseにしておいたほうが高速に動くようです。
コンポーネントはコンストラクタに書いていきます。
*BeginPlayなど他の場所に書くとクラッシュします。(error吐いてほしい...)
Component追加
.h
UPROPERTY(EditAnywhere)
USceneComponent* Scene;
UFUNCTION()
void hogeFunc();
UPROPERTY()は変数のオプションを指定できます。
オプション | 説明 |
EditAnywhere | エディタ(BP,Level)内で編集○ |
VisibleAnywhere | エディタ内で表示○、編集☓ |
BlueprintReadWrite | BPで読み取り○、変更○ |
BlueprintReadOnly | BPで読み取り○、変更☓ |
Category=" " | カテゴリを指定 |
他にもありますが、とりあえず良く使いそうなものだけ。
.cpp
Scene = CreateDefaultSubobject<USceneComponent>(TEXT("Scene")); RootComponent = Scene; Widget = CreateDefaultSubobject<UWidgetComponent>(TEXT("Widget")); Widget->SetupAttachment(RootComponent); WidgetInteraction = CreateDefaultSubobject<UWidgetInteractionComponent>(TEXT("WidgetInteraction")); Widget->SetupAttachment(RootComponent);
CreateDefaultSubobjectでコンポーネントを作成します。<>内はクラス名。TEXT内の("")はエディタ内で表示される名前です。
RootComponentで最上層のコンポーネントに設定します。
SetupAttachment(hoge)でhogeの下の層に設定します。
何か間違っていることがあればご指摘頂けると幸いです。