☕️
【UE5】BP上でTSubclassOf変数に対して特定のインターフェースを実装してるクラスだけ選択させる
概要
特定のインターフェースを実装してるクラスだけをUPROPERTY
として選択したいときがありました。
そのときに、MustImplements
というmeta属性を使うと、特定のインターフェースだけを実装してるUObjectだけ選択出来ることを知ったので、便利だと感じたので記事にしました。
参考になれば幸いです。
環境
UE5.4.4
やり方
TSubclassOf
変数に対してMustImplement=確認したいインターフェース名(UやAなどは要らない)
をUPROPERTYにつけるだけです。
例としてExampleMustImplments
インターフェースを実装してるActorだけを選択するActorクラスを作成し、BP上で切り替えられるようにします。
手順は以下になります。
- インターフェースを作成する
- インターフェースを指定するための
UPROPERTY
を含めたTSubClassOf
変数をActor(手っ取り早いのがActorだったのでそうしているがそれ以外でもいい)に持たせる - 2を継承したBPを作成し、インターフェースを実装したら項目が増えている確認する
インターフェース作成する
下記のようなインターフェースを用意します
※今回は選択したいだけなので関数は何も用意しません。
ExampleMustImplments.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "ExampleMustImplments.generated.h"
// This class does not need to be modified.
UINTERFACE()
class UExampleMustImplments : public UInterface
{
GENERATED_BODY()
};
/**
*
*/
class IExampleMustImplments
{
GENERATED_BODY()
// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
};
UPROPERTYを含めたTSubClassOf変数をActorに持たせる
下記のActorをC++で用意します
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ExampleActor.generated.h"
UCLASS()
class AExampleActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AExampleActor();
//追加
UPROPERTY(EditAnywhere,meta=(MustImplement="ExampleMustImplments"))
TSubclassOf<AActor> ExampleImplementsActor;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};
追加したのはこの部分です。ここで使っているMustImplement
を使うことで、ExampleMustImplments
を実装したクラスだけを指定できる形になります。
//追加
UPROPERTY(EditAnywhere,meta=(MustImplement="ExampleMustImplments"))
TSubclassOf<AActor> ExampleImplementsActor;
BPを作成し、インターフェースを実装したら項目が増えている確認する
AExampleActorを継承したBPを作成し、インターフェースを実装(このBPでもいいし、他のBPでもいい)後に選択項目が増えていれば成功です。
インターフェース実装前
インターフェース実装後
Discussion