动态实例化蓝图对象

有时候我们用C++定义了一个对象的类,而其他人员又可能在此类之上创建了蓝图类并进行了修改,那么如何在运行时获取到那个蓝图子类,又如何创建对象呢?

假定我们有个基类叫 MyHTCHandle ,基于此创建的蓝图类为 BP_Handle ,在这个蓝图类里可能会有其他设计人员进行了修改。

我们可以使用 ConstructorHelpers::FObjectFinder 来获取蓝图的类,从而使用 SpawnActor 创建 Actor ;

只需要加入如下代码:


static ConstructorHelpers::FObjectFinder<UClass> MyHandle(TEXT("Class'/Game/MyBlueprint/BP_Handle.BP_Handle_C'"));

if (MyHandle.Object)
{
  TSubclassOf<AMyHTCHandle> MyBPHandle = (UClass*)MyHandle.Object;
  GetWorld()->SpawnActor<AMyHTCHandle>(MyBPHandle , FVector(0), FRotator(0));
}

其中, ConstructorHelpers::FObjectFinder<UClass> 只能用于构造函数中。

关于这句 Class'/Game/MyBlueprint/BP_Handle.BP_Handle_C' ,可以在编辑器中找到该蓝图类,然后使用右键复制引用,
当然这时候得到的字符串 Blueprint'/Game/MyBlueprint/BP_Handle.BP_Handle' 其实指向的是蓝图类,如果要使用到它在C++中的类型就要稍微修改一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,359评论 19 139
  • 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组...
    justCode_阅读 5,870评论 1 6
  • 10#数据类型 合并数组和非合并数组 合并数组:存储方式是连续的,中间没有闲置空间。例如,32bit的寄存器,可以...
    constant007阅读 33,433评论 0 18
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,294评论 22 257
  • 终于渡过繁忙的一阶段,可以闲适一点,但更值得高兴的事情是终于有时间去做些自己喜欢的事情。 也许你也会喜欢这种感觉,...
    极客汤米阅读 3,408评论 0 5