使用Addressable更好的管理内存

本文介绍了Unity中使用Addressable系统进行内存管理的方法,通过对比直接引用、Resources目录加载和Assetbundle动态加载,强调了Addressable在内存优化上的优势,鼓励开发者尝试使用Addressable以解决内存问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你好,我是郑洪智,你可以叫我大智。我正在带小新学Unity。

洪流学堂公众号回复addr,可以下载Addressable中文手册,更有视频教程哦~


小新:“智哥,Assetbundle我只是大概学了一下,但是没咋用过。你说不用它就会有内存问题?”

大智:“咱们来一起做个测试吧。对于工程里的资源,一般有三种方式加载实例化:”

  • 场景中的脚本直接在Inspector上引用Prefab
  • 资源放在Resources目录下,通过Resource.Load加载
  • 使用Assetbundle动态加载

直接引用测试

测试1

首先咱们新建一个工程,先整个空场景,使用Profiler先看一下现在的内存占用情况。由于在Editor里面干扰因素比较多,咱们发布出来测试这个空场景的内存,发布时选中这个:

在Unity中打开Profiler(Window > Analysis > Profiler, 快捷键Ctrl+7),然后打开打包好的程序,程序就会自动连上:

可以看到现在的总内存占用是:267M,其中贴图占了75.3M。

测试2

然后给场景里面添加一个简单的脚本,使用public GameObject Prefab;定义一个成员变量。

using UnityEngine;

public class DirectReference : MonoBehaviour
{
    public GameObject ObjPrefab;
}

然后将一个Cube的Prefab拖到这个成员变量上面。Cube上面的材质球带了一张5.3M文件大小的贴图。

发布测试:

以上测试如果在编辑器中测试,会有不准确的地方,但也能看出大概的趋势。如果想要准确的数值可以打包发布以后链接Proflier测试。

可以看到现在的总内存占用是:297M,其中贴图占了80.6M。

对比就会发现即使Prefab没有在场景中实例化,依然占用了内存,这些内存是无法释放掉的。这还仅仅是一个Prefab,很多时候会用到Prefab数组,内存问题就会更严重。

Resources目录测试

测试3

把场景中的脚本去掉,这样就没有直接引用了。把Prefab放到Resources文件夹下,打包测试。

这种情况下你会发现和空场景是一致的,没有内存问题。但是仅仅是这样就完了么?

但是Unity官方是不建议使用Resources目录的,引用一段原话就是:

Assetbundle/Addressable

Addressable是基于Assetbundle的一个资产管理系统。使用Addressable可以通过弱引用的方式来加载资源,不加载之前是没有内存消耗的,加载后也可以完全卸载掉,对内存管理十分友好。

总结

使用Addressable已经很简单了,所以大胆尝试去使用这个系统吧,会给你带来很多益处~

洪流学堂公众号回复addr,可以下载《Addressable中文手册》,更有视频教程哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大智_Unity玩家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值