【UE4C++】シーンコンポーネントを生成してBPでいじれるようにする
シーンコンポーネントをBPで動かしたいけど、やり方がわからなかったので、
エンジンのCharacter.h、Character.cppを参考にしました。
ヘッダーにメンバー変数を設定
CPP_MyActor.h
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CPP_MyActor.generated.h"
class UPrimitiveComponent;
UCLASS()
class PROJECTNAME_API ACPP_MyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ACPP_MyActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
//BPで動かすやつ
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
USceneComponent* Component;
// Called every frame
virtual void Tick(float DeltaTime) override;
};
まず、BPで設定できるようにComponentという名前の変数を追加します。UPROPERTY(VisibleAnywhere, BlueprintReadOnly)というところが大切
シーンコンポーネントを作る処理を書く
CPP_MyActor.cpp
#include "CPP_MyActor.h"
#include "Engine/Classes/Components/PrimitiveComponent.h"
// Sets default values
ACPP_MyActor::ACPP_MyActor()
{
// 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;
RootComponent = CreateDefaultSubobject(TEXT("Root"));
//シーンコンポーネントを作る
this->Component = CreateOptionalDefaultSubobject(TEXT("Component"));
if (this->Component)
{
//ルートコンポーネントにアタッチ
this->Component->SetupAttachment(RootComponent);
}
}
次に、コンストラクタでルートコンポーネントを作って、それにアタッチするようにシーンコンポーネントをCreateOptionalDefaultSubobjectで作ります。
すると、BPでトランスフォームをいじったりできるようになります。