ue4 通过指定路径加载资源_UE4_C++_资源加载与优化

本文介绍了UE4中常见的资源加载方式,包括SpawnActor、ConstructHelpers、FStringAssetReference/FSoftObjectPath、StaticLoadObject、LoadObject/LoadClass。同时,探讨了资源加载的性能优化,特别是异步加载和预处理资源注册表的策略,以应对性能瓶颈和卡顿问题,提升游戏体验。
摘要由CSDN通过智能技术生成

资源加载与优化

  • 资源加载与优化
  • 常规资源加载方式
    • 1. SpawnActor / SpawnActorDeferred / NewObject
    • 2. ConstructHelpers
    • 3. FStringAssetReference / FSoftObjectPath
    • 4. StaticLoadObject
    • 5. LoadObject / LoadClass
  • 性能与卡顿优化
    • 预处理-资源注册表
    • 异步载入

在项目的开发过程中,资源作为功能的载体,是产生无限可能的基础。无论是材质、网格、特效,还是玩家、AI、具体的业务逻辑,都需要以资源为支撑。因此,在项目中,资源动态创建非常常见。但是,有的同学却对资源创建的方式有不小疑惑。 同时,在注重性能的项目中,大量的资源动态载入会成为性能瓶颈之一,如何对其进行优化以提升性能,也是对开发的一大挑战。

本文会对常用的资源创建方式做一个整合;同时针对性能方面,提出载入优化的几种方式;另外对UE4中的资源管理进行一个简单的介绍。

知乎的Markdown格式和原文有些许出入,强迫症的同学可访问此链接:

UE4_C++_资源加载与优化_妖刀丶朔夜-CSDN博客​blog.csdn.net
c943a7e6668230d56884f5a2bf45eda6.png

常规资源加载方式

资源创建一般分为四个步骤: 1. 以文件名创建一个空包

位置: UObjectGlobals.h/ResolveName
  1. 创建一个FLinkerLoad,并加载对应的Uasset文件,将其序列化

位置:UObjectGlobals.h / LoadPackageInternal -> GetPackageLinker -> LinkerLoad.cpp / CreateLinker

  1. 加载ImportMap
    位置:LinkerLoad.cpp / FinalizeCreation
  2. 加载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());

SpawnActor里也是调用了NewObject来进行资源的创建,但除此之外,还会将生成的Actor添加到World中。当需要创建的类是Actor子类时,推荐使用SpawnActor的形式创建。但当需要创建的对象非Actor子类时,则可以选择第二种方式进行创建

有的Actor在创建的时候,需要额外设置一些参数或者进行一些操作,可通过延迟生成SpawnActorDeferred来达成目的,用法如下:

ACustomAsset* ActorA = GetWorld()->SpawnActorDeferred<ACustomAsset>(ACustomAsset::StaticClass(), FTransform());
if (ActorA)
{
    Act
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值