实际上该功能可以通过纯蓝图写出,以下展示蓝图中如何操作构造器
仅需在创建"自定义事件"的时候勾选"编辑器中调用"属性,然后就可以直接在蓝图中生成
但同时,我们发现"从类生成Actor"该蓝图节点具有生成局限性
无法在当前关卡外生成
以及无法生成某些在蓝图中公开却不在该节点"Class"属性中公开的Actor例如"PostProcessVolume"
当遇到上述局限性时,考虑蓝图无法解决该问题,此时我们需要C++介入
此处以PostProcessVolume为例子
.h
UFUNCTION(BlueprintCallable, Category = "Akie Tools")
static void SpawnMyActor(UWorld* World, UClass* Class, FVector const& Location);
.cpp
void UakietoolsBPLibrary::SpawnMyActor(UWorld*World, UClass* Class, FVector const& Location)
{
if (Class) {
if (World) {
World->SpawnActor<APostProcessVolume>(Class, Location, FRotator(0.f));
}
}
}
实际上 由于超高的解耦性
上述代码可以在更改了UFUNCTION(中的规范)后源码直接迁移到蓝图宏库的插件中文章来源:https://www.toymoban.com/news/detail-630014.html
UFUNCTION(BlueprintCallable, meta = (DisplayName = "SpawnClass", Keywords = "AKieTools sample test testing"), Category = "AKieSpawnTools")
在蓝图中如此调用即可,注意 该变量类型为场景(World)常规搜索不到
复制下述代码到蓝图的创建变量栏粘贴就创建了该变量文章来源地址https://www.toymoban.com/news/detail-630014.html
BPVar(VarName="指认当下关卡",VarGuid=DCB2E34241C4E6C912199E987236928E,VarType=(PinCategory="softobject",PinSubCategory="",PinSubCategoryObject=Class'"/Script/Engine.World"',PinSubCategoryMemberReference=(MemberParent=None,MemberName="",MemberGuid=00000000000000000000000000000000),PinValueType=(TerminalCategory="",TerminalSubCategory="",TerminalSubCategoryObject=None,bTerminalIsConst=False,bTerminalIsWeakPointer=False,bTerminalIsUObjectWrapper=False),ContainerType=None,bIsReference=False,bIsConst=False,bIsWeakPointer=False,bIsUObjectWrapper=True,bSerializeAsSinglePrecisionFloat=False),FriendlyName="指认当下关卡",Category=NSLOCTEXT("KismetSchema", "Default", "Default"),PropertyFlags=5,RepNotifyFunc="",ReplicationCondition=COND_None,MetaDataArray=((DataKey="MultiLine",DataValue="true")),DefaultValue="None")
到了这里,关于【UE5/UE4】【UE C++】制作一个蓝图宏库用以在构造器中Spawn Actor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!