UE4_C++_资源加载与优化
在项目的开发过程中,资源作为功能的载体,是产生无限可能的基础。无论是材质、网格、特效,还是玩家、AI、具体的业务逻辑,都需要以资源为支撑。因此,在项目中,资源动态创建非常常见。但是,有的同学却对资源创建的方式有不小疑惑。
同时,在注重性能的项目中,大量的资源动态载入会成为性能瓶颈之一,如何对其进行优化以提升性能,也是对开发的一大挑战。
本文会对常用的资源创建方式做一个整合;同时针对性能方面,提出载入优化的几种方式;另外对UE4中的资源管理进行一个简单的介绍。
常规资源加载方式
资源创建一般分为四个步骤:
-
以文件名创建一个空包
位置: UObjectGlobals.h/ResolveName
-
创建一个FLinkerLoad,并加载对应的Uasset文件,将其序列化
位置:UObjectGlobals.h / LoadPackageInternal -> GetPackageLinker -> LinkerLoad.cpp / CreateLinker
-
加载ImportMap
位置:LinkerLoad.cpp / FinalizeCreation
-
加载ExportMap
位置: LinkerLoad.cpp / CreateLoader - > CreateExport
更为详细的步骤可参考https://www.dazhuanlan.com/2019/11/18/5dd230d80a187/
常用的资源载入方式大致分为四种,即:
1. SpawnActor / SpawnActorDeferred / NewObject
当你可以取到资源类型信息时,可使用这种方式。
ACustomAsset* AActor = GetWorld()->SpawnActor<ACustomAsset>(ACustomAsset::StaticClass());
ACustomAsset* BActor = NewObject<ACustomAsset>(this,ACustomAsset::StaticClass())