UE4常用函数 | 您所在的位置:网站首页 › ue4代码要求 › UE4常用函数 |
游戏中的角色、场景、道具等都需要美术资源来进行设计,高精度的模型、贴图和光影效果可以带来更加逼真的游戏场景和角色形象,提升游戏的沉浸感和互动性。因此,在游戏开发中,美术资源加载成为经常使用的操作,正确的选择加载资源方法,将会使得游戏性能和画面展现得到较好的结合。下面,我们一起来了解下UE4中的资源加载方法。 # 01资源加载分类UE4中根据不同的分类标准,可以划分为不同的加载情况: ● 静态加载和动态加载 根据加载的时机,资源加载可以分为静态加载和动态加载。 静态加载主要是在构造函数中完成的加载方式,而在构造函数之外的加载都称为动态加载。 UE4中UObject派生的类,构造函数是在引擎初始化阶段调用的,导致静态加载过程也是在引擎初始化阶段完成的,即当类默认对象(CDO)被创建时实现的。因此,静态加载一个资源时,如果它所需的其他资源没有预加载,则会加载失败。 即静态加载是在引擎初始化阶段完成加载的,而非创建类的对象才加载(涉及到UE4启动类型注册流程)。如果大量资源采取了静态加载的方法,会使得游戏启动缓慢。 ● 加载非蓝图资源和蓝图资源 根据加载的对象不同,可以分为加载非蓝图资源和加载蓝图资源 加载蓝图一般使用Class相关的加载函数,加载的是类对象,而非蓝图资源一般使用LoadObject函数,直接加载资源对象。 类型安全:LoadClass函数可以确保加载的蓝图资源类型安全,避免了在运行时出现类型错误的问题。而LoadObject函数是一种通用的加载函数,它不能保证加载的资源类型安全。 编译时检查:LoadClass函数可以在编译时进行类型检查,避免出现潜在的错误。而LoadObject函数是一种运行时函数,它不能在编译时进行类型检查。 LoadClass函数可以预先加载蓝图资源,避免在游戏运行时出现延迟 ● 同步加载和异步加载 同步加载是指程序需要等待资源加载结束后才会继续向下执行,如果加载资源比较大,可能导致游戏卡顿; 为了避免上述情况,需要采用异步加载的方法;异步加载虽然是游戏性能得到提升,但是实现方法也更加复杂,将在另一篇文章中详述。 # 02代码实现在UE4工程中新建TestActor的AActor C++类; ● 静态加载蓝图资源 静态加载蓝图资源的话,在ATestActor的构造函数中可以使用static ConstructorHelpers::FObjectFinder或者static ConstructorHelpers::FClassFinder来实现,定义BPLight或BpClass对象时,需要传入资源路径作为参数。 不过在引擎启动的过程中,提示加载失败了,静态蓝图资源加载限制还是比较大的。 ● 静态加载非蓝图资源 同样在在ATestActor的构造函数中,定义StaticMesh对象时,传入静态网格资源路径参数。 查看日志位置,是在引擎启动阶段输出的,并非游戏运行阶段。 ● 动态加载蓝图资源 在ATestActor的BeginPlay()函数中,使用LoadClass,模块类名填蓝图资源的基类名; LoadClass函数定义如下:即封装了StaticLoadClass函数,然后对一些非必填的参数设置了默认值。实际中,也可以根据自己的需要设置这些参数的值。 蓝图资源加载成功后,如果要转换为Actor,需要将UClass对象传递到SpawnActor函数中 ● 动态加载非蓝图资源类 在ATestActor的BeginPlay()函数中,使用LoadObject函数,模板参数填资源所属类型名; LoadObject和LoadClass类似,也是封装了StaticLoadObject函数,并设置了一些非必填的默认值。 在以上加载资源函数中,使用的资源路径可以通过在引擎中选择资源,右键“复制引用”来获取。如果是加载蓝图资源的话,还得在末尾增加"_C"。 # 03小结● UE4中资源加载的分类 ● 静态、动态、蓝图和非蓝图资源加载 ● 蓝图资源路径需要加后缀_C ● 本文所介绍的方法都是同步加载 |
CopyRight 2018-2019 实验室设备网 版权所有 |