1、一个预制正在加载,同时卸载其他预制的引用资源,这种情况下,是无法知道正在加载的预制是否使用到将被卸载的资源的,就没有办法做卸载,请问该如何处理呢?
例如,prefab1引用sprite1、sprite2,prefab2引用sprite2、sprite3,卸载sprite2时,prefab1该如何处理
2、在资源加载前是否有方法能获取预制内的引用关系,getDependsRecursively接口,只在预制体加载完成后获取资源引用关系才是正确的
1、一个预制正在加载,同时卸载其他预制的引用资源,这种情况下,是无法知道正在加载的预制是否使用到将被卸载的资源的,就没有办法做卸载,请问该如何处理呢?
例如,prefab1引用sprite1、sprite2,prefab2引用sprite2、sprite3,卸载sprite2时,prefab1该如何处理
2、在资源加载前是否有方法能获取预制内的引用关系,getDependsRecursively接口,只在预制体加载完成后获取资源引用关系才是正确的
别指望了,感觉程序加载的资源管理这块是个弱项。
准备写一个基于引用计数的资源管理模块,遇到同样的问题。。。现在资源加载完成后才能获取到对应的依赖,这样子,如果还有资源在加载,你都不能卸载任何一个资源,因为根本不知道加载中的资源会不会引用到你释放的资源(因为接口获取不到加载中的资源的依赖资源)。。。开发团队没有注意到这个问题么。。。
我的方案是改成有任何一个资源正在加载,就不允许卸载
资源释放是伴随着节点销毁而释放的。如果没有节点销毁理论上士没有资源释放的。
例如,prefab1引用sprite1、sprite2,prefab2引用sprite2、sprite3,卸载sprite2时,prefab1该如何处理
这种情况:对资源进行 管理(引用计数和垃圾回收机制)。
可以参考一下:UILoader
使用
var deps = cc.loader.getDependsRecursively(prefab);
https://docs.cocos.com/creator/api/zh/classes/loader.html#getdependsrecursively
获取两个prefab的depend资源数组,通过比对diff和shared资源,将no share的资源release掉即可
那如果其中一个prefab处于加载中呢?释放a时,b正在加载,但不知道b具体引用到哪些内容
避免在加载中进行资源的释放,可以在加载结束后进行回掉释放
getdependsrecursively这种有很多限制。实际项目其实情况很复杂。
问个问题,destroy一个节点,这个节点下所有资源都会被释放吗
如果你说的所有资源是指节点和组件,那么是的。但如果你说的所有资源包含Assets,那么不是的。