`
aigo
  • 浏览: 2648849 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[UE4]C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()

UE4 
阅读更多

原文作者:@玄冬Wong 

 

相关内容:

C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>() 

http://aigo.iteye.com/blog/2281558
C++实现动态加载UObject:StaticLoadObject();以Texture和Material为例

http://aigo.iteye.com/blog/2268056

 

这里说的静态加载指的是必须在构造函数中完成的加载方式,动态加载值得是可以在Runtime期间加载的方式,UE4源码里面,前者其实是对后者的一层封装,即FObjectFinder()是对LoadObject()的封装。But,FClassFinder()不是对LoadClass()的封装FClassFinder()内部调用的是LoadObject()。

 

 

如果要获取某个蓝图BP的类型class,可以通过ConstructorHelpers::FClassFinder()来获取,例如:

static ConstructorHelpers::FClassFinder<AActor> UnitSelector(TEXT("Blueprint'/Game/MyProject/MyBlueprint.MyBlueprint'"));
TSubclassOf<AActor> UnitSelectorClass = UnitSelector.Class;

 
但是在启动游戏时会报错提示找不到文件,例如:

 

Default property warnings and errors:

Error: COD Constructor (MyGameMode): Failed to find /Game/MyProject/MyBlueprint.MyBlueprint

 

解决办法有两种(这是UE4的一个坑,浪费了我很长时间。。。):

A,在copy reference出来的文件路径后面加_C,例如:Blueprint'/Game/Blueprints/MyBlueprint.MyBlueprint_C'

static ConstructorHelpers::FClassFinder<AActor> UnitSelector(TEXT("Blueprint'/Game/Blueprints/MyBlueprint.MyBlueprint_C'"));
TSubclassOf<AActor> UnitSelectorClass = UnitSelector.Class;

   

B,去掉路径前缀:/Game/Blueprints/MyBlueprint

 

static ConstructorHelpers::FClassFinder<AActor> UnitSelector(TEXT("/Game/Blueprints/MyBlueprint"));
TSubclassOf<AActor> UnitSelectorClass = UnitSelector.Class;

 

另外注意:FClassFinder<T>的模版名称,不能直接写UBlueprint,例如:FClassFinder<UBlueprint>是错误的。创建蓝图时选择的是什么父类,则写对应的父类名,假如是Actor,那么要写成:FClassFinder<AActor>,否则无法加载成功。

 

 

使用TSubclassOf<T>时模板名必须相同

另外, FClassFinder<T>()函数中的模版名必须和TSubclassOf<T>变量的模版名一样,例如上面的都是AActor,如果不一样,也会出现上面的错误。
再给个例子:

static ConstructorHelpers::FClassFinder<UUserWidget> TestBP(TEXT("/Game/Blueprints/MyWidget_BP"));
TSubclassOf<UUserWidget> MyWidgetClass = TestBP.Class;

 

也可使用UClass*替换TSubclassOf<T>

例如:

static ConstructorHelpers::FClassFinder<UUserWidget> TestBP(TEXT("/Game/Blueprints/MyWidget_BP"));
UClass* MyWidgetClass = TestBP.Class;

 

 

之前看到很多例子是通过FObjectFinder()来获取class,现在想想感觉是无奈之举,UE4的文档比较坑,不仅蓝图的文档更新不同步,C++的文档更是少得可怜。

static ConstructorHelpers::FObjectFinder<UBlueprint> UnitSelector(TEXT("Blueprint'/Game/MyProject/MyBlueprint.MyBlueprint'"));
TSubclassOf<AActor> UnitSelectorClass = (UClass*)UnitSelector.Object->GeneratedClass;

 

 

 

其他参考:

CDO Constructor: Failed to find Blueprint

https://answers.unrealengine.com/questions/84880/cdo-constructor-failed-to-find-blueprint-ue-44.html

 

 

  • 大小: 5.5 KB
分享到:
评论

相关推荐

    ue4系列视频教程.txt

    UE4高级教程建筑室内可视化 A-018---208集ue4官方从入门到精通视频教程(1080P高清中文字幕) UE4室内教程 AboutCG UE4虚幻引擎独立游戏制作教程 UE4编程教学 虚幻引擎4ok 1、Unreal Engine 4 零基础美术流程完全...

    UE4 C++开发超好用的VS插件 Visual Assist X 10.9.2301

    5. **UE4集成**:这款插件特别针对UE4进行了优化,可以更好地与UE4的项目结构和编程习惯相融合,使得UE4的C++开发体验得到大幅提升。 6. **自定义设置**:Visual Assist X允许用户根据个人喜好调整各种设置,包括...

    UE4 C++教程 虚幻四C++教程

    UE4 C++教程 虚幻四C++教程

    UE4 C++ 离线API

    UE4 C++ 离线API 下载直接使用 无障碍

    UE4 UI简单例子 C++

    在UE4(Unreal Engine 4)中,UI系统基于UMG(Unreal Motion Graphics),它提供了一种可视化的方式去创建用户界面,并且可以与C++代码深度集成。本示例"UE4 UI简单例子 C++"展示了如何利用C++编程语言在UE4中创建一...

    ue4动态加载资源路径信息

    在UE4(Unreal Engine 4)中,动态加载资源是一项关键功能,它允许游戏或应用在运行时根据需要加载和卸载资产,从而优化内存使用和性能。UE4使用了一种模块化的设计,使得资源管理变得更加灵活。下面将详细探讨如何...

    ue4 c++ 多边形三角化

    在UE4(Unreal Engine 4)中,C++是一种主要的编程语言,用于实现游戏逻辑和自定义功能。在3D图形处理中,多边形的三角化是一个关键步骤,因为大多数现代图形硬件和软件都支持三角形作为基本渲染单元。本教程将深入...

    UE4蓝图调用C++函数的工程分享

    在UE4(Unreal Engine 4)中,开发者可以结合蓝图和C++代码来构建游戏逻辑,这提供了灵活性和性能的平衡。本工程分享主要关注如何在蓝图中调用C++函数,分为两种主要方式:一是通过继承C++类的蓝图类直接调用,二是...

    ue4蓝图c++动态改变staticmeshactor材质例子动态修改纹理

    实现了通过蓝图把场景中的AStaticMeshActor和两个动态材质实例UMaterialInstanceDynamic 传给c++ 自定义函数参数。 并在自定义函数里面实现两张材质的动态交替变更,其中一张材质还动态加载了本地1.png图片,使得能...

    毕业设计基于C++的一款UE4射击游戏源码.zip

    毕业设计基于C++的一款UE4射击游戏源码。一款UE4射击游戏Demo,包含UE4游戏框架及整套联网射击游戏功能。一款UE4射击游戏Demo,包含UE4游戏框架及整套联网射击游戏功能。一款UE4射击游戏Demo,包含UE4游戏框架及整套...

    UE4使用C++在蓝图中实现打开外部exe程序功能(含源码)

    首先,我们需要理解C++的基本语法和UE4的API。在UE4中,我们可以使用FPlatformProcess模块来与操作系统进行交互,包括启动外部程序。FPlatformProcess提供了Execute函数,它允许我们执行一个命令并等待其完成。以下...

    UE4加载本地图片本地图片

    本教程将详细解释如何在UE4中加载和使用本地图片。 首先,我们需要了解UE4的项目结构。一个标准的UE4项目通常包含以下部分: 1. **MyProject.uproject**:这是项目的配置文件,包含了项目的基本信息,如版本、名称...

    UE4学习笔记----使用C++之控制球体运动并使用移动粒子效果(源代码)

    在UE4(Unreal Engine 4)中,游戏对象的行为和交互主要通过C++或蓝图实现。本笔记将深入探讨如何使用C++编程语言来控制球体的运动,并结合移动粒子效果来提升游戏视觉体验。以下是你需要了解的关键知识点: 1. **...

    UE4 C++JSON读取示例.zip

    在UE4(Unreal Engine 4)中,C++是一种常用的语言进行游戏开发,而JSON(JavaScript Object ...理解并熟练掌握JSON读取对于UE4游戏开发非常重要,因为它允许你动态地加载和存储游戏数据,提高游戏的灵活性和可扩展性。

    UE4C++写入CSV文件.docx

    UE4 C++ 写入 CSV 文件 UE4 是一款功能强大且广泛应用的游戏引擎,而 CSV 文件是一种通用的文本文件格式,能够被多种应用程序所支持,包括 Excel。在 UE4 项目中,需要将一些数据保存到 CSV 文件中,以便于后续的...

    UE4的C++离线文档

    该文档包含了UE4 C++ API的所有类、函数、宏、枚举等内容,并提供了详细的说明和示例代码。 文档内容 UE4 C++离线API文档的内容主要分为以下几部分: 类(Classes):该部分包含了UE4 C++ API中所有类的信息,包括...

    CryptoPPForUE4.17.2_5.6.5.zip

    综上所述,"CryptoPPForUE4.17.2_5.6.5.zip" 提供了一个针对Unreal Engine 4.17.2优化的、适用于64位系统的Crypto++静态库,使得开发者能够在UE4项目中方便地集成和使用各种密码学算法,提升游戏的安全性和数据保护...

    UE4UE5游戏开发入门指南: 开发环境搭建及核心技术

    内容概要:本文详细介绍了UE4和UE5两款强大游戏开发引擎的开发环境搭建、编程语言基础、项目创建与基本操作、蓝图编程与C++编程、资源管理与优化、项目发布与部署等方面的内容。通过对各个方面的详细介绍,帮助...

    UE4和web网页的UI交互

    在实现UE4与Web网页的交互时,需要注意安全性和性能问题。确保所有通信都经过加密,防止数据泄露。同时,优化网络通信以减少延迟,提升用户体验。对于大型项目,可能需要考虑缓存策略和负载均衡等高级技术。 七、...

    ue4,c++,平面最小封闭区域识别

    ①:得到线段我们的线段集合S(本次项目鼠标点击得到线段(p1,p2两点)已经在ue4蓝图里面实现,这一步就不过多阐述) ②:移除孤立的线段(两端的点都是孤立的); ③:拆分所有的线段(就是将所有的相交线线段拆...

Global site tag (gtag.js) - Google Analytics