#memo

indiedev太郎

UE4.13、C++側で構造体を定義してBPで使う

USTRUCT(BlueprintType)
struct FGameItem
{
	GENERATED_USTRUCT_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item")
	FName key;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item")
	int32 num;

	// Constructer
	FGameItem()
	{
		key = FName(TEXT("none"));
		num = 0;
	}
	FGameItem(const FName InKey, const int32 InNum)
	{
		key = InKey;
		num = InNum;
	}

	// Functions
	int32 GetNum() const
	{
		return num;
	}
	int32 AddNum(int32 InNum)
	{
		return num += InNum;
	}

	int32 SubNum(int32 InNum)
	{
		return num -= InNum;
	}
};

これでエディタで構造体を作ったときのように、BPで構造体型の変数が作れたり、breakノードが使えるようになる
https://i.gyazo.com/cfe95af85a2eff643e795d4233f8a972.png

・コンストラクタでデフォルト値を設定する
・UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Category") を設定したメンバ変数がbreakで展開される
・UFUNCTIONマクロは使えない(多分)


上記SS内のTMapでこの構造体を管理して、値をBPでみたいというコード、ついで

public:
	// Player ItemList
	typedef TMap<FName, TSharedPtr<FGameItem>> ItemMap;
	ItemMap ItemList;

	UFUNCTION(BlueprintCallable, Category = "Item")
	bool GetItem(const FName InKey, FGameItem& Item)
	{
		if (ItemList.Contains(InKey))
		{
			Item = *ItemList[InKey];
			return true;
		}

		return false;
	}

参考
Structs, USTRUCTS(), They're Awesome - Epic Wiki

Rama is God.