原文作者:@玄冬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
相关推荐
UE4高级教程建筑室内可视化 A-018---208集ue4官方从入门到精通视频教程(1080P高清中文字幕) UE4室内教程 AboutCG UE4虚幻引擎独立游戏制作教程 UE4编程教学 虚幻引擎4ok 1、Unreal Engine 4 零基础美术流程完全...
5. **UE4集成**:这款插件特别针对UE4进行了优化,可以更好地与UE4的项目结构和编程习惯相融合,使得UE4的C++开发体验得到大幅提升。 6. **自定义设置**:Visual Assist X允许用户根据个人喜好调整各种设置,包括...
UE4 C++教程 虚幻四C++教程
UE4 C++ 离线API 下载直接使用 无障碍
在UE4(Unreal Engine 4)中,UI系统基于UMG(Unreal Motion Graphics),它提供了一种可视化的方式去创建用户界面,并且可以与C++代码深度集成。本示例"UE4 UI简单例子 C++"展示了如何利用C++编程语言在UE4中创建一...
在UE4(Unreal Engine 4)中,动态加载资源是一项关键功能,它允许游戏或应用在运行时根据需要加载和卸载资产,从而优化内存使用和性能。UE4使用了一种模块化的设计,使得资源管理变得更加灵活。下面将详细探讨如何...
在UE4(Unreal Engine 4)中,C++是一种主要的编程语言,用于实现游戏逻辑和自定义功能。在3D图形处理中,多边形的三角化是一个关键步骤,因为大多数现代图形硬件和软件都支持三角形作为基本渲染单元。本教程将深入...
在UE4(Unreal Engine 4)中,开发者可以结合蓝图和C++代码来构建游戏逻辑,这提供了灵活性和性能的平衡。本工程分享主要关注如何在蓝图中调用C++函数,分为两种主要方式:一是通过继承C++类的蓝图类直接调用,二是...
实现了通过蓝图把场景中的AStaticMeshActor和两个动态材质实例UMaterialInstanceDynamic 传给c++ 自定义函数参数。 并在自定义函数里面实现两张材质的动态交替变更,其中一张材质还动态加载了本地1.png图片,使得能...
毕业设计基于C++的一款UE4射击游戏源码。一款UE4射击游戏Demo,包含UE4游戏框架及整套联网射击游戏功能。一款UE4射击游戏Demo,包含UE4游戏框架及整套联网射击游戏功能。一款UE4射击游戏Demo,包含UE4游戏框架及整套...
本教程将详细解释如何在UE4中加载和使用本地图片。 首先,我们需要了解UE4的项目结构。一个标准的UE4项目通常包含以下部分: 1. **MyProject.uproject**:这是项目的配置文件,包含了项目的基本信息,如版本、名称...
首先,我们需要理解C++的基本语法和UE4的API。在UE4中,我们可以使用FPlatformProcess模块来与操作系统进行交互,包括启动外部程序。FPlatformProcess提供了Execute函数,它允许我们执行一个命令并等待其完成。以下...
在UE4(Unreal Engine 4)中,游戏对象的行为和交互主要通过C++或蓝图实现。本笔记将深入探讨如何使用C++编程语言来控制球体的运动,并结合移动粒子效果来提升游戏视觉体验。以下是你需要了解的关键知识点: 1. **...
在UE4(Unreal Engine 4)中,C++是一种常用的语言进行游戏开发,而JSON(JavaScript Object ...理解并熟练掌握JSON读取对于UE4游戏开发非常重要,因为它允许你动态地加载和存储游戏数据,提高游戏的灵活性和可扩展性。
UE4 C++ 写入 CSV 文件 UE4 是一款功能强大且广泛应用的游戏引擎,而 CSV 文件是一种通用的文本文件格式,能够被多种应用程序所支持,包括 Excel。在 UE4 项目中,需要将一些数据保存到 CSV 文件中,以便于后续的...
综上所述,"CryptoPPForUE4.17.2_5.6.5.zip" 提供了一个针对Unreal Engine 4.17.2优化的、适用于64位系统的Crypto++静态库,使得开发者能够在UE4项目中方便地集成和使用各种密码学算法,提升游戏的安全性和数据保护...
该文档包含了UE4 C++ API的所有类、函数、宏、枚举等内容,并提供了详细的说明和示例代码。 文档内容 UE4 C++离线API文档的内容主要分为以下几部分: 类(Classes):该部分包含了UE4 C++ API中所有类的信息,包括...
在实现UE4与Web网页的交互时,需要注意安全性和性能问题。确保所有通信都经过加密,防止数据泄露。同时,优化网络通信以减少延迟,提升用户体验。对于大型项目,可能需要考虑缓存策略和负载均衡等高级技术。 七、...
内容概要:本文详细介绍了UE4和UE5两款强大游戏开发引擎的开发环境搭建、编程语言基础、项目创建与基本操作、蓝图编程与C++编程、资源管理与优化、项目发布与部署等方面的内容。通过对各个方面的详细介绍,帮助...
①:得到线段我们的线段集合S(本次项目鼠标点击得到线段(p1,p2两点)已经在ue4蓝图里面实现,这一步就不过多阐述) ②:移除孤立的线段(两端的点都是孤立的); ③:拆分所有的线段(就是将所有的相交线线段拆...