creator3.7.3 自动图集中的spriteframe代码加载问题


如图,在项目中,经常有这种情况,spriteframe被直接sprite引用,这个sprite所在的prefab是实例化成多个的,而且spriteframe会被设定成多种。比如上面我的spriteframe就会设定为金币和钻石等等。
所以我使用了

bundleLoadDir('texture-1', `style${id}`, SpriteFrame, onProgress)

api把spriteframe按照名字缓存。
然后再实例化它们的时候使用:

this.needSprite.spriteFrame = bam.spriteFrames['iCoin'];

然而在运行的时候会出现下面的状况:
第一次实例化这个prefab没问题,甚至第一次在同一时间实例化多个都没有问题,然而destroy这些实例化的个体,再次实例化,则报错。(在某种清空下一定报错,但有时候不会)

当你把prefab里面的sprite本身所引用的spriteframe清空后保存该prefab,则一切正常。

所以目前我所采用的方式就是在需要代码动态加载的sprite上面保持清空的spriteframe属性。只不过每次在编辑这个prefab的时候看不到一个默认效果比较难受。
是否是我的 使用方式不对?
我之前有一种使用方式是用一个空节点,用component里面的property引用需要的spriteframe。在需要的时候去拿这个引用,这样一直都是没有问题的。只是觉得用起来比较别扭。

最后还是采用了这种古朴的方式:


就这么引用着最稳。

感谢反馈,我们会尽快处理。

1赞

另外我发现一旦使用bundleLoadDir函数把所有的spriteframe都加载,并持有这些引用,那么遇到某个spriteframe被单独直接在某些prefab中的属性检查器中引用时,(注意不是从上面持有的引用赋值),这些prefab实例化出来以后再destroy的时候就会报错。进入了一个引擎内部的debugger无限断点暂停。


如果不提前加载这些spriteframe,则不会出现这个问题。
也就是说,使用bundleLoad(Dir)函数加载并持有引用的方式与属性检查器直接引用的方式获取SpriteFrame,是冲突的(两种方式去使用同一个spriteframe就会遭遇问题)

方便提供下简单的测试 demo 吗?