unity资源释放(AssetBundle和Asset)

article/2025/10/21 17:36:57

本节主要叙述下,资源的释放问题。
1、我们准备了下两个资源,并且要做打包处理。
这里写图片描述

代码的代码,很简陋,只是为了说明问题。代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;public class AssetBundleCreator
{[MenuItem("AssetBundle/Build")]private static void BuildBundle(){string outDir = "Bundles";if (!Directory.Exists(outDir)){Directory.CreateDirectory(outDir);}AssetBundleBuild[] buildList = new AssetBundleBuild[1];buildList[0].assetBundleName = "bundleDemo";string[] bundleAssets = new string[2];bundleAssets[0] = @"Assets\Prefabs\Cube.prefab";bundleAssets[1] = @"Assets\Prefabs\bg.png";buildList[0].assetNames = bundleAssets;BuildPipeline.BuildAssetBundles(outDir, buildList, BuildAssetBundleOptions.None, EditorUserBuildSettings.activeB`````````````
ildTarget);}
}

打包的结果:
这里写图片描述

2、测试过程
2.1 测试界面如下:
这里写图片描述

2.2 执行函数LoadBundle

private void LoadBundle(GameObject go){StartCoroutine(LoadAssetBundle());}private IEnumerator LoadAssetBundle(){string assetBundlePath = Application.dataPath + @"\..\Bundles\bundleDemo";WWW www = new WWW(assetBundlePath);while (!www.isDone){yield return null;}m_bundle = www.assetBundle;Debug.LogError("LoadAssetBundle over!");}

此时内存里面只有一个镜像文件,我们可以通过profile观测到:
这里写图片描述

2.3 执行一次UnloadBundleFalse,观察这个镜像文件是否被卸载掉了。

private void UnloadBundleFalse(GameObject go){m_bundle.Unload(false);Debug.LogError("UnloadBundleFalse over!");}

此时AssetBundle镜像不存在了。
这里写图片描述

2.4 执行一次LoadBundle和LoadAsset,观察内存变换。
重新运行游戏,执行一次LoadBundle,上面已经叙述。然后执行一次LoadAsset。

private void LoadAsset(GameObject go){m_textureAsset = (Texture)m_bundle.LoadAsset("bg", typeof(Texture));m_texture.mainTexture = m_textureAsset;Debug.LogError("LoadAsset over!");}

此时,我们load一张图片赋值给了UITexture组件。观察Profile的内存状态:
这里写图片描述
再看镜像文件也在:
这里写图片描述

2.5 执行一次LoadBundle、LoadAsset和UnloadAsset,观察镜像文件是否在Asset是否在?

    private void UnloadAsset(GameObject go){if (m_textureAsset != null){Resources.UnloadAsset(m_textureAsset);}Debug.LogError("UnloadAsset over!");}

镜像文件在:
这里写图片描述
Asset不在了:
这里写图片描述

2.6 执行一次LoadBundle、LoadAsset和UnloadBundleTrue

   private void UnloadBundleTrue(GameObject go){m_bundle.Unload(true);Debug.LogError("UnloadBundleTrue over!");}

镜像文件不在了:
这里写图片描述
Asset也不在了:
这里写图片描述

2.7 删除物体(绑定这个脚本的物体),然后执行一次 Resources.UnloadUnusedAssets();
测试代码:

 private void DestroyComponent(GameObject go){StartCoroutine(DestroyComp());}private IEnumerator DestroyComp(){Destroy(m_destroyComp.gameObject);yield return null;Resources.UnloadUnusedAssets();}

镜像文件在:
这里写图片描述
Asset不在:
这里写图片描述

叙述完毕。

总结:
1、镜像文件(bundle)用Unload(true),Unload(false)都可卸载掉。
2、Asset的卸载有两种方法,一种是指定类型资源强制卸载,函数为:
Resources.UnloadAsset(m_textureAsset); //这里的指定类型的资源不能是GameObject、Component,指定是Material、Texture、Mesh、AudioClip资源。
第二种卸载方式:Resources.UnloadUnusedAssets(); 这个要求必须是Asset在毫无其他引用的情况下,才能被卸载。所谓的毫无其他引用,比如你的texture被一个UI元素使用,或者被一个脚本的变量使用,没有赋值为null,这些都算作是有引用,那么即使你使用这个函数,也不能卸载Asset资源。另外补充说明一点就是:
Resources.UnloadUnusedAssets();和Resources.UnloadAsset(m_textureAsset);
前者效率很低,因为是遍历场景中的所有无引用的资源然后卸载;后者是指定卸载某一个资源,所以效率高。前者在场景切换的时候会被Unity自动调用一次,后者不会。
3、关于镜像文件和Asset以及GameObject的关系,我想画一个图来解释:
这里写图片描述

over!关于资源管理的代码,尚未完成,待叙。
最后给出,项目的完整代码:https://pan.baidu.com/s/1rvgPoTgMPNkpMOjrqSnP6g


http://chatgpt.dhexx.cn/article/JJ0ebPCV.shtml

相关文章

【Unity 资源分享】 | Unity 精品写实动物模型+全套动画 资源分享

📢前言 💦好久没有写分享Unity资源的文章了,最近也是收藏了挺多Unity相关的资源💦所以就来写一篇文章分享几个资源包您喜欢💦所以呢,这次小Y又从自己的乾坤袋里掏出了一个精品动物模型全套动画分享给大家使…

Unity资源热更-Addressables总结(一)

Addressables是Unity官方推出的用于资源热更的系统,可在Package Manager里面下载,我这里分两部分讲解,第一部分是操作入门,第二部分是代码编程以及注意事项 一、入门 选择合适的Addressables版本下载安装完成后,选择Gr…

Unity 资源商店无法登陆,提示链接失效 的解决办法

出现资源商店无法登陆问题,网络换一下,用自己的手机热点连网,就可以了。

Unity 加载资源

直接把资源放在unity的目录里是不行的 打包的时候 不会打进去 要想打包到apk里 只有两种选择 1 放到 StreamingAssets 里 – Application.streamingAssetsPath 2 场景里有引用 他会自动打包进apk里 资源放到预制体里 并且预制体没在场景里 也不打包 先安装 https://github.co…

Unity 资源加载卸载过程

什么时候才是UnusedAssets? 看一个例子: Object obj Resources.Load("MyPrefab"); GameObject instance Instantiate(obj) as GameObject; ......... Destroy(instance); 创建随后销毁了一个Prefab实例,这时候 MyPrefab已经没有被实际的物体…

Unity资源分享网站——记录

UWA开源库 UWA问答 | 开源库 | 帮助开发者发现更好的解决方案| 侑虎科技 FREEDOMCLUB Get Unity Assets For Free | Welcome To Unity Assets FREEDOM CLUB Itch.io Top game assets - itch.io reddit https://www.reddit.com/r/Unity3D/ NOTE 「unity」の人気の記事一覧&a…

Unity资源导入自动化设置

Unity资源导入自动化设置 简介具体实现 新的问题解决方法 简介 大家都知道,在Unity中导入的资源不同类型有不同的设置, 例如:模型文件导入之后是这样的 当导入数量少的时候我们可以手动去改,但是当数量很多,或者文件结…

Unity资源下载材质贴图消失

一、问题 在网上下载的Unity资源模型导入Unity后变成白色,材质丢失。 二、解决办法 1.在Unity Assets中选择下载的模型。 2.在Inspector面板点击模型的materials,在Location那一栏选择Use External Materials(Legacy)&#xff0…

Unity资源导入

1、在资源中添加自定义包 2.选择导入 3.导入后出现以下错误 4.双击错误打开进行修改

unity资源管理

unity资源一般,分为两个目录:Resources和StreamingAssets,下面我们就来了解下,这两个目录 如何使用,有什么区别。 Resources 放在Resources里边的资源,会全部打进包体,且会压缩。这里边的资源&…

Unity中的资源管理-资源类型和基本使用

本文分享Unity中的资源管理-资源类型和基本使用 真不容易, 经过几篇文章的铺垫, 我们终于进入正题了. 今天继续给大家聊聊资源管理中的基础知识: 资源的类型和基本的使用. Unity中的资源类型 这一部分在官方文档里介绍的很清楚, 有兴趣的同学可以自行跳转: 如果不愿意看官网…

【Unity3D】资源文件 ③ ( Unity 资源包简介 | 导出 Unity 资源包 | 导出资源包的包含依赖选项 | 导入 Unity 资源包 | Unity 资源商店 )

文章目录 一、Unity 资源包简介二、导出 Unity 资源包1、正常导出 Unity 资源包2、导出资源包的包含依赖选项 三、导入 Unity 资源包四、Unity 资源商店 一、Unity 资源包简介 将 Project 文件窗口 中的 Assets 资源进行打包 , 就会得到一个 资源包 Unity Package , 后缀为 &qu…

图嵌入 DeepWalk

文章目录 图表示学习-图嵌入 DeepWalk1 图嵌入2 随机游走-Random walks3 DeepWalk3.1 Hierarchical Softmax3.1.1 哈夫曼树3.1.2 Logistic Regression3.1.3 Softmax 回归3.1.4 Hierarchical Softmax 3.2 模型训练 图表示学习-图嵌入 DeepWalk 1 图嵌入 目标:将节点…

对DeepWalk的理解

DeepWalk的理解 如今我们都处于大数据时代,同时我们也身处于各个网络当中,列如通信网络,交通网络等等。我们如何将网络中的信息用我们计算机能懂的方式展现出来,这就是网络表示。而deepwalk主要是用来表示网络的一种方式&#xf…

KDD 2014 | DeepWalk: 社会表征的在线学习

目录 前言Abstract1.Introduction2.Problem Definition3.Learning Social Representations3.1 Random Walks3.2 Connection: Power laws3.3 Language Modeling 4.Method4.1 Overview4.2 Algorithm:DeepWalk4.2.1 Skip-Gram4.2.2 Hierarchical Softmax4.2.3 Optimiza…

DeepWalk

原文 《DeepWalk: Online Learning of Social Representations》 亮点 In this paper we introduce deep learning (unsupervised feature learning) techniques, which have proven successful in natural language processing, into network analysis for the first time.…

【论文精读实战】DeepWalk: Online Learning of Social Representations

DeepWalk: Online Learning of Social Representations 本文是我参加Datawhale的CS224W图机器学习时的笔记,第一次学习图机器学习,对DeepWalk这篇开山之作的理解。 论文的三位作者均来自纽约州立大学石溪分校,杨振宁和丘成桐也曾在此教学。 …

Deepwalk深度游走算法

主要思想 Deepwalk是一种将随机游走和word2vec两种算法相结合的图结构数据的挖掘算法。该算法可以学习网络的隐藏信息,能够将图中的节点表示为一个包含潜在信息的向量, Deepwalk算法 该算法主要分为随机游走和生成表示向量两个部分,首先…

DeepWalk阅读笔记

DeepWalk是一种学习网络中节点的表示的新的方法,是把language modeling的方法用在了social network里面,从而可以用deep learning的方法,不仅能表示节点,还能表示出节点之间的拓扑关系,也就是表现出社会网络的社会关系…

论文阅读|DeepWalk: Online Learning of Social Representations

论文阅读|DeepWalk: Online Learning of Social Representations 文章目录 论文阅读|DeepWalk: Online Learning of Social RepresentationsAbstractIntroductionProblem DefinitionLearning Social RepresentationsMethod实验设置Related Work我的看法参考资料 Abstract Deep…