BundleA中的Prefab和BundleB的Prefab同时静态引用main、resources或internal中的用一个图片或Spine(其它应该也可以)
把这两个Prefab同时实例化添加到场景中
然后destroy掉一个Prefab并且移除它所在的Bundle,必报错
BundleA中的Prefab和BundleB的Prefab同时静态引用main、resources或internal中的用一个图片或Spine(其它应该也可以)
把这两个Prefab同时实例化添加到场景中
然后destroy掉一个Prefab并且移除它所在的Bundle,必报错
快别让实习生写代码了
,资源释放导致UI各种崩
实习生工资才便宜呀,不然一个老手多贵
这个好像是会这样的,。要不就remove,不要destroy,destroy会释放资源,如果其他有引用这个资源,就会有问题
这实现就有问题,其它地方有引用,引用计数不应该为0,怎么就给释放了呢
先别急着下结论是bug,查一下bundlea和b有没有依赖关系,移除其中一个bundle的时候是否有释放该bundle加载过的资源,或者搞个Demo发上来看看大家一起研究研究如果确实有bug,也能让大家少踩坑
bundle-release-bug.zip (36.6 KB)
demo来了,主要问题在bundle.removeAll会不管引用计数,把当前bundle和引用到的其它bundle的资源全部删除
3.6.3和3.7.1我都试了,都这样
需要构建web平台后测试
3.7.1试了第一次点击释放没有崩啊
需要构建后
web就行
借地方再说一下这个问题,父节点执行onDestroy时,子节点已经早早被销毁了
来个引擎的大哥吧
我这里一个Bundle存一个UI,里面内容比较多,所以用的是releaseAll,我开始期望的是它一定会将自身的资源全移除,而引用的资源减少引用计数(毕竟不归你管理),现在看来它的实现是不管你是谁遍历到了直接删
ui是一个prefab吗?那你直接bundle.release(prefab)不是就妥了吗?不过这还是很不方便我是每次加载创建资源的时候都会添加一个资源管理组件资源的管理伴随节点生命周期,节点destroy资源也就释放了不需要额外的去管理
,我正在修改,我这里也是做的自动释放,之前对这个releaseAll理解的有问题(我还是感觉照我原来理解的那样设计这个api合理
)
先prefab.decRef,在资源bundle.releaseAll
哇,这也能炸么,我就想把它完全移除就好难啊
好难用啊
prefab.decRef不就已经释放了吗?为什么还有releaseAll来这么一下, decRef会调用relealse的方法,加载prefab.addref destroy的时候decref,add和dec成对出现就好了呀,当然如果你还有其他需要动态加载的资源比如动态加载一张纹理 音频什么的也需要自己管理
prefab和资源在两个bundle,prefab和资源的分包策略会不一样,然后资源的分包计划是不用去处理资源引用计数的事,卸载UI的时候直接全释放
没有关系的prefab对资源是静态引用加载的时候引擎已经做好了其依赖资源的引用计数了,你管理好动态加载的prefab就ok了,它依赖的资源要不要释放不需要你关心的否则这个引用计数就没有意义了,回到2.4版本以前了