Creator3.x引擎的动态资源加载和释放方案

请大佬仔细看下,上面关于远程资源的加载和释放代码,引擎文档说的是要自己管理,但具体的资源加载进来后,对象的引用计数要不要+1?多次加载相同资源怎么复用?对象的释放应该把计数-1还是destroy?释放哪种对象才能回收内存?

这些问题如果你在文档上能找到答案,或者从来没觉得远程资源需要释放,那这篇文章确实是多余的。

直接按照 * assetManager.dependUtil._depends 用uuid做key,存放该资源的所有依赖资源。这个规则把动态的依赖关系建立起来就可以正常处理了

如果你用了 loadRemote 并做过释放,可能会有不同想法。

const imgAsset = new ImageAsset(img);
imgAsset._uuid = this.getImageAssetUUID(url);
assetManager.assets.add(imgAsset._uuid, imgAsset);
imgAsset._nativeUrl = imgAsset._uuid;
assetManager.dependUtil._depends.add(imgAsset._uuid, { deps: [], nativeDep: [] });
远程我是这样建的

这个只是 ImageAsset 吧,Texture2D 和 SpriteFrame 呢?会做释放吗?

大佬,demo在这个帖子里

可以都建立依赖关系

mark…

本地静态资源,引擎是怎么加载释放的呢? :rofl:

你说的是本地缓存么

不是,说的就是包里的资源。

顶个,3.8.2也还是一样

想说 loadRemote 的 imageasset都释放了,怎么gfx内存还是下不去,弄了一上午才发现 gfx 降不下来的内存要是手动释放 texture2d 才行……

顶,这是社区把资源管理讲的最详细的帖子

1赞


在这个里面我有一个疑惑。
预制体 里面的某个地方 替换成 动态图片了,当销毁掉预制体时,这个动态图片是否需要开发者手动 修改计数。如果需要的话,这该怎么知道预制体中那些使用了动态资源呀?

需要
你用了动态资源的地方就是使用了动态资源

那是不是在预制体销毁的时候,把当前预制体用到的动态资源计数都减1;
被更换图片显示(替换的动态资源) 被替换下的资源也要 减1 。 是这么操作吗?

  1. 可以这么做
  2. 如果该替换的资源不是动态资源,就不需要,如果是,就需要。(当然一般而言,没必要立即减1,如果有反复使用的可能,可以在预制体销毁时一次性调用)

好的,谢谢答疑。

顺便问句,请问下你认为什么样的资源是"动态资源"?