2017.11.7更新:

其实这个函数就是顾名思义,关键是理解AssetBundle, Asset, GameObject, 资源等之间的关系,参考此文即可:

http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html

---------------------------------羞耻的分割线-------------------------------------------

项目每60秒执行一次Resources.UnloadUnusedAssets。所以后续的GC不会一下子需要清理很多内存,所以游戏不会卡顿。

下面是查阅一下资料得到观点,应该有错漏,希望大神指正,谢谢。

1.

官方说法:An asset is deemed to be unused if it isn't reached after walking the whole game object hierarchy,
including script components. Static variables are also examined.
The script execution stack, however, is not examined so an asset referenced
only from within the script stack will be unloaded。
And, if necessary, loaded back in the next time one of its properties or methods is used.
This requires extra care for assets which have been modified in memory.
Make sure to call EditorUtility.SetDirty before an asset garbage collection is triggered.
我对上面的理解是,Resources.UnloadUnusedAssets只对Unity的组件脚本内的变量/属性引用的资源和所有静态变量引用的
(静态类的成员引用也算,这里的引用包括多重引用)资源,进行unused标记unload,因为剩下的就是栈上变量(local variable)引用的资源,
这些资源会在变量出栈时unload掉(应该是类似UnloadUnusedAssets),如果这时要再使用这些资源,就需要重新load,即modified in memory。

这里的理解有误的话,麻烦指出。

2.

现在的老大说,Resources.UnloadUnusedAssets只是标记,并不清理,并且不是标记为空闲(这个是GC干的,就是mono的清理,因为mono不归还内存给os,只在mono层标记为空闲,os层还是使用中),只是把该块内存降级,让gc清理。

所以destroy an object后调Resources.UnloadUnusedAssets并没有卵用,要等GC来了才生效。

3.

UnloadUnusedAssets - what exactly does "unused" mean:
1)静态变量引用的资源;Monobehavior中变量/属性引用的资源 视为“used”
2)被C#层强引用的资源,视为“used”
3) 弱引用被Unity视为“unused”,是会被清掉的;
但是(先GC.Collect,再UnloadUnusedAssets则暂时清不掉,下次GC.Collect才能,或者交换顺序就能立刻清掉)
来源(已收入wiki):http://answers.unity3d.com/questions/910845/unloadunusedassets-what-exactly-does-unused-mean.html

4.

It only unloads assets that have been destroyed:
意思是我们Destroy掉的GameObject还是占着内存,被这个接口标记后才能被gc回收。
这个说法对吗?
来源:http://answers.unity3d.com/questions/720239/does-unloadunusedassets-unload-non-active-or-occlu.html

Resources.UnloadUnusedAssets的更多相关文章

  1. 关于AB包的释放与 Resources.UnloadUnusedAssets的关系

    Resources.UnloadUnusedAssets 并不能释放AB包中东西,只能释放从AB包中加载出来的资源,也可以释放场景中的资源,其它不是从AB包加载来的资源. AB加载后,整个包都加载到内 ...

  2. Unity AssetBundles and Resources指引 (四) AssetBundle使用模式

    本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...

  3. Unity AssetBundles and Resources指引 (一)

    本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...

  4. Unity 最佳实践

    转帖:http://www.glenstevens.ca/unity3d-best-practices/ 另外可以参考:http://devmag.org.za/2012/07/12/50-tips- ...

  5. 玩转Unity资源,对象和序列化(下)

    本文将从Unity编辑器和运行时两个角度出发,主要探讨以下两方面内容:Unity序列化系统内部细节以及Unity如何维护不同对象之间的强引用.另外还会讨论对象与资源的技术实现差别. 译注:除非特别说明 ...

  6. Unity内存理解(转)

    Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大. Resources.Load就是从一个缺省打进程序包里的AssetBu ...

  7. Unity3D中可中途释放的单例

    Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...

  8. [转]全面理解Unity加载和内存管理

    [转]全面理解Unity加载和内存管理 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质 ...

  9. KEngine:Unity3D资源的打包、加载、调试监控

    资源模块做什么? 资源模块——ResourceModule,是KEngine中最核心的模块,其他模块基本或多或少的对它有依赖,它主要的功能是:资源打包.路径定义.资源管理.资源调试. 资源模块对Uni ...

随机推荐

  1. 使用selenium再次爬取疫情数据(链接数据库)

    爬取网页地址: 丁香医生 数据库连接代码: def db_connect(): try: db=pymysql.connect('localhost','root','zzm666','payiqin ...

  2. Android Studio--家庭记账本(三)

    点击右上角可以实现将花费以折线图的形式显示出来.同时将同一天的花费自动计算.暂时还没有加x,y轴 ChartsActivity.java: package com.example.family; im ...

  3. Python 爬虫工程师必看,深入解读字体反爬虫

    字体反爬虫开篇概述 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人 ...

  4. Python面向对象编程扑克牌发牌程序,另含大量Python代码!

    1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不 ...

  5. 【计算机算法设计与分析】——NP

    时间复杂度 时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快.也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的 ...

  6. 关于setTimeout的用法注意事项

    setTimeout setTimeout的定义:setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. setTimeout的用法:setTimeout(代码片段,执行代码等待的毫 ...

  7. C#设计模式之19-观察者模式

    观察者模式(Observer Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/423 访问. 观察者模式 ...

  8. speedtest测速网站测速节点添加流程

    一.准备一台服务器: 系统需求:常见Linux系统: 二.服务器入网(确保可以访问互联网): 三.ssh登录到服务器安装speedtest守护程序程序包: 安装和启动,执行以下命令: curl -O ...

  9. 花式求解 LeetCode 279题-Perfect Squares

    原文地址 https://www.jianshu.com/p/2925f4d7511b 迫于就业的压力,不得不先放下 iOS 开发的学习,开始走上漫漫刷题路. 今天我想聊聊 LeetCode 上的第2 ...

  10. c++排序二叉树的出现的私有函数讨论,以及二叉树的删除操作详解

    c++排序二叉树的出现的私有函数讨论, 以及二叉树的删除操作详解 标签(空格分隔): c++ 前言 我在c++学习的过程中, 最近打了一个排序二叉树的题目,题目中出现了私有函数成员,当时没有理解清楚这 ...