内存优化之资源管理

举报
爱上游戏开发 发表于 2022/07/01 22:54:27 2022/07/01
【摘要】 推荐阅读:  我的CSDN 我的博客园 QQ群:704621321 注:以下文章是针对egret来写的,其他引擎可参考思想,实现或许会有差...

推荐阅读:

注:以下文章是针对egret来写的,其他引擎可参考思想,实现或许会有差异

我们这边的分多个场景,比如说我们登录场景资源,是另外分开的一个json配置的,到我们切换场景的时候就会根据那个配置的url来RES.destory对应的资源

比如游戏主场景,我们游戏是切块地图的,我们在进入游戏的时候会把地图资源存在一个map对象里面,每当切换场景要切地图的时候,我们就会检索这个map对象,来销毁地图加载新的地图

  1. 模型,特效资源。(加载、销毁管理,纳入计数器。定时检测,如果资源销毁时间超过5分钟,则会判定为资源可回收)
    2.地图资源(主要是场景图片)。 (场景移动过程中,会把当前使用到的图片都放入一个map中存起来,(暂定为1分钟检测一次)定时检测,移除超过玩家9宫格范围外 2个格子的其它地图资源)
    3.UI图片,图标资源。(对图片资源进行管理,界面打开的时候,会进场注册使用,计数+1,界面关闭的时候,会进入销毁逻辑,计数-1 ,定时检测,当前使用图片计数为0 的图片资源 。 不过现在这个地方还是会有问题:主要在Render 列表的地方)

我的方法就比较简单粗暴,直接添加到舞台上的时候弄个标记,不在舞台上了去掉,直接读RES中的缓存池,过滤不在舞台上的,其他全干掉
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通用性高的资源,加入公共图集,独立性强的UI,放在自己的模块中即可。
比如这是common图集,我们会分的比较细一点。 比如这是common图集,我们会分的比较细一点。
在这里插入图片描述
在这里插入图片描述
他的做法是,除了加入引用计数之外,还加入一个最后引用的时间戳,每次检测的时候处理看引用计数之外,还看间隔的时间,如果最近引用的时间太近的话,也不释放
一般公共的图片,应该都有最近的引用时间戳,所以应该也不会被释放。

此外有一位大神做的比较厉害的地方:
对象池技术:(游戏中基本所有对象,都通过对象池来进行创建。包括但不局限于:文本、图片、各种对象), 基本把laya的底层代码,都进行了相关修改

文章来源: unity3d.blog.csdn.net,作者:爱上游戏开发,版权归原作者所有,如需转载,请联系作者。

原文链接:unity3d.blog.csdn.net/article/details/98210001

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。