UE4资产管理基础1
介绍序号引擎中一些资产相关知识点,入门内容
1 为什么什么资产管理重要
-
所有游戏都需要资产
-
运行的资产是有限的,需要管理、加载、释放
-
影响游戏运行时性能的体验,同步/异步,启动/切换
-
影响包体大小,打包/分块
-
影响更新机制,pak/dlc/chunk
2 什么是资产
3 Package包含哪些对象
-
子对象
-
蓝图
-
类 _C
-
DataAsset
-
DataTable
4 Object路径
-
格式 类名`/路径/包名.对象名:子对象名
-
类名一般会被忽视掉,所以一般不写
-
类:/路径/包名.类名_C (包名往往和类名一致)
-
对象:/路径/包名.对象
-
路径:/Root/Path1/Path2
-
路径 根(Root):/Game, /Engine, /XXXModule
5 管理引用
- 硬引用
直接对象关联,自动触发加载
-
UProperty* 直接引用
-
TSubClassOf<>(对于某个T类型)
-
软引用,路径指向
-
FSoftObjectPath 例如蓝图中对象的软引用
-
FSoftClassPath 例如蓝图中类的软引用
-
FSoftObjectPtr 看源码内部包括Package信息
-
FSoftObjectPtr
-
FSoftObjectPtr注意:蓝图中没有使用的函数等也会进行Cook
6 FindObject和LoadObject
- FindObject如何根据名字获取对象?对象的内存组织关系
FUObjectHashTables.HashOuter, Hash
- LoadObject如果找不到对象,会尝试加载路径Package
LoadClass==LoadObject
7 同步加载 (Sync Load)
-
自动加载
-
FSoftObjectPath.TryLoad()->LoadObject
-
UKismetSystemLibrary::LoadAsset_Blocking->FSoftObjectPtr::LoadSynchronous->LoadObject
-
UKismetSystemLibrary::LoadClassAsset_Blocking
-
FStreamableManager::RequestSyncLoad
8 异步加载 (Async LOad)
-
UKismetSystemLibrary::LoadAsset->StreamableManager.RequestAsyncLoad(SoftObjectPath)
-
UKismetSystemLibrary::LoadAssetClass
-
StreamableManager::RequestAsyncLoad
9 Demo 地图进度条加载
-
加载屏幕进度条
-
LoadPackageAsync & GetAsyncLoadPackage