Crash: Assertion failed when LoadSynchronous NiagaraComponent

[Image Removed]

重现步骤
LoadSynchronous NiagaraComponent will cause crash. Meanwhile LoadObject won’t cause crash.[Image Removed]

Hi,

你好,抱歉回复的比较晚。

你的改动我感觉本质上应该没有区别,从报错的log看,好像也有点问题,0x00083408应该包含了RF_NeedLoad|RF_NeedPostLoad,所以我暂时也不太确定什么原因,暂时没有什么头绪,抱歉。

目前定位到的原因是Niagara异步加载还没加载完成时,有其他资源加载失败,调用FAsyncPackage::FinishObjects(),其中LoadContext->PRIVATE_GetObjectsLoadedInternalUseOnly()直接获取了所有加载中的资源(包括正在加载的Niagara),把他们全都释放了。

好的,不知道你们有没有找到解决方案?

我从代码上看,没有看出来触发问题的原因,从崩溃的堆栈上看,应该是这个NiagaraComponent上面还有RF_NeedLoad|RF_NeedPostLoad flag,但是却认为包含他的AsyncPackage的加载已经结束了。

从你的描述上看,加载失败的资源跟正在加载的Niagara是在同一个AsyncPackage里,因为如果不是的话,Niagara应该不会被释放(MarkAsGarbage)。而且如果这里NiagaraComponent被释放了,好像就不会调到NiagaraModule.OnAssetLoaded的回调了,因为FinishObjects里已经把PackageObjLoaded赋空值了,所以正在FAsyncPackage.GetLoadedAssetsAndPackages的时候,就不会返回对应的Asset了。

如果我有理解错误,麻烦给与纠正。