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