Unity笔记 资源加载 内存优化

本文探讨Unity中的资源加载策略,包括本机堆内存管理和不同加载方式的影响。重点介绍了如何通过减少Hierarchy引用、使用Resource.Load和AssetBundle.Load卸载资源以优化内存。详细阐述了Instantiate的3种方式,以及如何处理UnusedAssets,确保正确释放内存。在场景切换时,Unity会自动销毁大部分内存对象,但 AssetBundle的文件内存镜像需要手动销毁。
摘要由CSDN通过智能技术生成

本机堆(Native Heap)
这里是unity管理的资源内存(区别于c#的托管堆),包括装载GameObject, Transform, Mesh, Texture, Material, Shader和Script等。这些内存是unity来管理的,看下unity默认如何组织的资源加载和卸载的。但是否和托管堆是独立的这个有待验证。

加载,当scene加载完成时所有用到的asset都会被加载,包括Hierarchy中的所有的gameobject涉及的资源和脚本中用到的资源。
卸载,除了DontDestroyOnLoad的资源,在切换scene时都会被卸载。注意singleton(设计模式)通常用到DontDestroyOnLoad。

对于内存优化,我们感兴趣的就是看看什么行为可以影响unity自己的资源加载和卸载策略。
尽量减少Hierarchy中的引用,改成手动的Resource.Load()这样加载的资源可以用Resource.UnloadAsset(obj)和Resources.UnloadUnusedAssets()来释放。还有AssetBundle的Load和Unload方法。
这些load和unload还有Instantiate都是干啥的,见下图:

unity memory

看了上图,可以理解加载的2个阶段:第一阶段是使用Resources.Load或者AssetBundle.Load加载各种资源,第二阶段是使用GameObject.Instantiate克隆出一个新的GameObject。

3种实例化prefab的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好热哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值