判断UE编辑器场景资产是否准备完成
playerzhou
无回复
问题
- UE编辑器在加载完场景里所有Actor后还会异步加载编译各类资产,如Shader,Texture,StaticMesh等,因此如果在资产为准备好时直接对场景进行处理可能会出现错误
资产加载流程
- 每个类型的资产具有一个管理类单例,该管理类继承自接口
IAssetCompilingManager
,通过该管理类进行编译加载 - 资产在加载状态更新后会调用管理类的接口进行通知,管理类会更新该类资产的加载信息,并通知到
Notification
UI组件上,从而使用户能够从编辑器上获取加载信息
获取当前加载情况
IAssetCompilingManager
接口不属于UObject
,因此无法通过反射获取到所有IAssetCompilingManager
类,但是这些管理类会注册至单例FAssetCompilingManager
上,UE则是通过遍历在FAssetCompilingManager
注册的所有IAssetCompilingManager
对象来管理所有IAssetCompilingManager
FAssetCompilingManager
提供了接口GetNumRemainingAssets()
来获取剩余待编译的资产数目,因此可以通过FAssetCompilingManager::Get().GetNumRemainingAssets() == 0
来判断所有资产是否都准备完成
来一发吐槽