本机堆的优化

当你加载完成一个Unity的scene的时候,scene中的所有用到的asset(包括Hierarchy中所有GameObject上以及脚本中赋值了的的材质,贴图,动画,声音等素材),

都会被自动加载(这正是Unity的智能之处)。也就是说,当关卡呈现在用户面前的时候,所有Unity编辑器能认识的本关卡的资源都已经被预先加 入内存了,这样在本关卡中,用户将有良好的体验,不论是更换贴图,声音,还是播放动画时,都不会有额外的加载,这样的代价是内存占用将变多。Unity最 初的设计目的还是面向台式机,

几乎无限的内存和虚拟内存使得这样的占用似乎不是问题,但是这样的内存策略在之后移动平台的兴起和大量移动设备游戏的制作中出现了弊端,因为移动设 备能使用的资源始终非常有限。因此在面向移动设备游戏的制作时,尽量减少在Hierarchy对资源的直接引用,而是使用Resource.Load的方 法,在需要的时候从硬盘中读取资源,

在使用后用Resource.UnloadAsset()和Resources.UnloadUnusedAssets()尽快将其卸载掉。总之,这里是一个处理时间和占用内存空间的trade off,

如何达到最好的效果没有标准答案,需要自己权衡。

在关卡结束的时候,这个关卡中所使用的所有资源将会被卸载掉(除非被标记了DontDestroyOnLoad)的资源。注意不仅是DontDestroyOnLoad的资源本身,

其相关的所有资源在关卡切换时都不会被卸载。DontDestroyOnLoad一般被用来在关卡之间保存一些玩家的状态,比如分数,级别等偏向文 本的信息。如果DontDestroyOnLoad了一个包含很多资源(比如大量贴图或者声音等大内存占用的东西)的话,这部分资源在场景切换时无法卸 载,将一直占用内存,

这种情况应该尽量避免。

另外一种需要注意的情况是脚本中对资源的引用。大部分脚本将在场景转换时随之失效并被回收,但是,在场景之间被保持的脚本不在此列(通常情况是被附 着在DontDestroyOnLoad的GameObject上了)。而这些脚本很可能含有对其他物体的Component或者资源的引用,这样相关的 资源就都得不到释放,

这绝对是不想要的情况。另外,static的单例(singleton)在场景切换时也不会被摧毁,同样地,如果这种单例含有大量的对资源的引用,也会成为大问题。

因此,尽量减少代码的耦合和对其他脚本的依赖是十分有必要的。如果确实无法避免这种情况,那应当手动地对这些不再使用的引用对象调用Destroy()

或者将其设置为null。这样在垃圾回收的时候,这些内存将被认为已经无用而被回收。

需要注意的是,Unity在一个场景开始时,根据场景构成和引用关系所自动读取的资源,只有在读取一个新的场景或者reset当前场景时,才会得到清理。

因此这部分内存占用是不可避免的。在小内存环境中,这部分初始内存的占用十分重要,因为它决定了你的关卡是否能够被正常加载。因此在计算资源充足

或是关卡开始之后还有机会进行加载时,尽量减少Hierarchy中的引用,变为手动用Resource.Load,将大大减少内存占用。在 Resource.UnloadAsset()和Resources.UnloadUnusedAssets()时,只有那些真正没有任何引用指向的资源 会被回收,因此请确保在资源不再使用时,将所有对该资源的引用设置为null或者Destroy。

同样需要注意,这两个Unload方法仅仅对Resource.Load拿到的资源有效,而不能回收任何场景开始时自动加载的资源。与此类似的还有 AssetBundle的Load和Unload方法,灵活使用这些手动自愿加载和卸载的方法,是优化Unity内存占用的不二法则~

总之这些就是关于Unity3d优化细节,具体还是查看Unity3D的技术手册,以便实现最大的优化.

Unity3D占用内存太大怎么解决呢? -补相关推荐

  1. Unity3D占用内存太大的解决方法【先转,慢慢看】

    2019独角兽企业重金招聘Python工程师标准>>> Unity3D占用内存太大的解决方法 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unit ...

  2. Unity3D占用内存太大怎么解决

    最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个 ...

  3. Unity3D占用内存太大怎么解决呢? -尾

    Unity中的内存种类 实际上Unity游戏使用的内存一共有三种:程序代码.托管堆(Managed Heap)以及本机堆(Native Heap). 程序代码包括了所有的Unity引擎,使用的库,以及 ...

  4. Unity3D占用内存太大怎么解决呢? -中

    关于内存管理 按照传统的编程思维,最好的方法是:自己维护所有对象,用一个Queue来保存所有object,不用时该Destory的,该Unload的自己处理. 但这样在C# .net框架底下有点没必要 ...

  5. unity3d占用内存太大解决方法

    原帖:http://www.onevcat.com/2012/11/memory-in-unity3d/ 转载自星辰 Unity3D占用内存太大的解决方法 最近网友通过网站搜索Unity3D在手机及其 ...

  6. unity占内存大小_Unity3D占用内存太大的解决方法

    原文链接:http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太 ...

  7. win11占用内存太高怎么解决?

    win11占用内存太高怎么办?win11系统对于系统的占用量会更大.很多的用户安装了这个系统之后都有遇到内存被大量占用的情况.那么我们如何通过系统内部优化的方法来解决这个问题呢?今天我们一起来看看解决 ...

  8. mysql5.6启动占用内存很大的解决方法

    mysql5.6启动占用内存很大的解决方法 参考文章: (1)mysql5.6启动占用内存很大的解决方法 (2)https://www.cnblogs.com/musings/p/5913225.ht ...

  9. oracle12cnolog,oracle12c 服务占用内存太大,oracle调整内存解决方法

    直接通过sqlplus命令行处理: 1.查看当前oracle内存占用情况: C:\Users\Administrator>sqlplus /nolog SQL*Plus: Release 12. ...

最新文章

  1. ELV局部视图与差分隐私【敏感度到底怎么理解】【上】
  2. 内蒙古全国计算机考试注意事项,2018年3月内蒙古自治区呼和浩特计算机等级考试注意事项...
  3. Linux学习总结(74)——wget 命令详解
  4. mysql 双机备份_mysql双机热备详解及延伸备份
  5. 如何去实现java与数据库的连接
  6. office 2019 word公式键盘输入空格无响应
  7. 左程云中级提升班-9在有限时间内获得最大奖励以及需要的最少时长问题
  8. HTML表格中输数字进行计算,excel表格如何自动计算输入数字
  9. 如何使用机器学习在一个非常小的数据集上做出预测
  10. Attiny48单片机编程经验总结
  11. 服务器 异常自动关机,服务器自动关机常见问题
  12. 实现60fps的网易云音乐首页
  13. html画布创建黑白象棋棋盘,canvas应用——中国象棋棋盘
  14. python 游戏大作_使用requests和beautifulsoup爬取3DM单机大作排行榜
  15. CSMA/CD协议分析
  16. STM32跳入HardFault Handler中断分析
  17. 计算机 实验室安全准入制度,南京信息工程大学实验室安全准入制度(试行)...
  18. rgb空间转换为luv
  19. setup facatory9.0打包详细教程(含静默安装和卸载)
  20. 机电一体化综合实训【2】

热门文章

  1. H5页面实现下载文件兼容移动端
  2. SV独立客户端无法登陆问题
  3. 2022G3锅炉水处理考试题库及答案
  4. 汇率问题正在以讹传讹
  5. 如何下载 spring 官方文档 pdf
  6. python异或^ 移位运算符
  7. eas 税率修改_如何修改金蝶EAS业务单据中的字段为必填项
  8. 让你的Lable拥有qq表情!
  9. 使用opencv检测字符断裂
  10. Redis详解(3)数据持久化机制