UE踩坑记

判断UE编辑器场景资产是否准备完成

playerzhou 无回复

问题

  • UE编辑器在加载完场景里所有Actor后还会异步加载编译各类资产,如Shader,Texture,StaticMesh等,因此如果在资产为准备好时直接对场景进行处理可能会出现错误

资产加载流程

  • 每个类型的资产具有一个管理类单例,该管理类继承自接口IAssetCompilingManager,通过该管理类进行编译加载
  • 资产在加载状态更新后会调用管理类的接口进行通知,管理类会更新该类资产的加载信息,并通知到NotificationUI组件上,从而使用户能够从编辑器上获取加载信息

获取当前加载情况

  • IAssetCompilingManager接口不属于UObject,因此无法通过反射获取到所有IAssetCompilingManager类,但是这些管理类会注册至单例FAssetCompilingManager上,UE则是通过遍历在FAssetCompilingManager注册的所有IAssetCompilingManager对象来管理所有IAssetCompilingManager
  • FAssetCompilingManager提供了接口GetNumRemainingAssets()来获取剩余待编译的资产数目,因此可以通过FAssetCompilingManager::Get().GetNumRemainingAssets() == 0来判断所有资产是否都准备完成

来一发吐槽

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据