解決できたようでよかったです。
ただ今こちらでも試してみたのですが、記事のコードのままだとactorを継承したクラスを指定するとゲーム終了時にクラッシュしてしまいますね。。それに第一引数も使っていないようなので整理すると以下のような感じになりそうですね。
UObject* UCreateNewObject::NewObjectFromBlueprint(TSubclassOf<UObject> UC)
{
if ( UC->IsChildOf( AActor::StaticClass() ) ) return NULL;
return StaticConstructObject(UC);
}
またメンバ変数の値を取得するのが目的であれば、newする代わりにデフォルト値を取得するカスタムノードを作成するという手もあります。
//.h
UCLASS()
class TESTAPP_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_UCLASS_BODY()
UFUNCTION(BlueprintPure, Category = "Class|DefaultProperty")
static bool GetClassDefaultPropertyEnumAsByte(UBlueprint* inBPClass, const FString& inProperty, uint8& outResult);
};
//.cpp
bool UMyBlueprintFunctionLibrary::GetClassDefaultPropertyEnumAsByte(UBlueprint* inBPClass, const FString& inProperty, uint8& outResult)
{
if ( !(inBPClass && inBPClass->GeneratedClass) ) return false;
UByteProperty* byte_prop = FindField<UByteProperty>( inBPClass->GeneratedClass, FName(*inProperty) );
if ( !(byte_prop && byte_prop->Enum) ) return false;
outResult = byte_prop->GetPropertyValue_InContainer( inBPClass->GeneratedClass->GetDefaultObject() );
return true;
}
上記は指定したブループリントクラスの指定したメンバ変数(enum)のデフォルト値を取得するカスタムノードの例です。引数のuint8の部分とUBytePropertyの部分を変更すれば、他の型でも動作すると思います。
アクタをスポーンさせる前にデフォルト値によって条件判定をしたい場合に便利です。
こちらも何かの参考になれば幸いです。
