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ノードが使えるようになる
・コンストラクタでデフォルト値を設定する
・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.