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

article/2025/10/21 20:20:13

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

真不容易, 经过几篇文章的铺垫, 我们终于进入正题了.

今天继续给大家聊聊资源管理中的基础知识: 资源的类型和基本的使用.

Unity中的资源类型

这一部分在官方文档里介绍的很清楚, 有兴趣的同学可以自行跳转:

1

如果不愿意看官网, 以下我们简单做一下梳理和总结. 大家也可以有个大致的印象.

Unity常见的资源类型有:

  • Texture(纹理), Sprite(精灵): BMP、TIF、TGA、JPG、PNG 和 PSD
  • Sound(音效): Mp3, Wav, OGG, AIFF
  • Fbx(模型): Dae、3ds、Dxf、Obj、Max
  • Mesh(网格)
  • Animation(动画), Animator(动画控制器)
  • Font(字体): TTF, BMFont, Fnt
  • Shader(着色器)
  • Meterial(材质)
  • Prefab(预制)

其中大部分不需要实例化, 加载完成即可使用.

各种资源导入Unity之后, Unity会对其进行一些配置, 比如音效和图片在不同平台下的压缩方式, 图片是按照纹理方式还是按照精灵方式使用等.

Unity不会使用资源的原始版本, 而是对每个资源进行配置, 即所谓AssetImporter, 并生成对应的.meta文件用于描述, 最后在Library中生成最终在Unity使用的资源, 在发布时和运行时, 使用的是Unity生成的版本.

我们可以重写各种AssetImporter, 从而在各种资源导入时做自定义的逻辑, 比如导入图片时, 默认将其按照文件夹制作为图集(Atlas).

下面是一张图片的导入设置:

本文分享2

第一个红圈代表这个图片的类型, 是纹理还是精灵等.

第二个红圈是在各个平台下的压缩设置.

下面是其对应的.meta文件内容:

3

.meta文件描述了图片信息和使用方式, 比如上面包含了文件的唯一ID, 导入设置信息等. 这里只截取部分, 更多的内容有机会我们单独再讨论.

本章节只是对资源类型进行简单的举例和梳理总结, 大家目前只需要知道:

  • Unity中支持各种类型的资源
  • 每个资源在导入后都会生成一个对应的配置文件.meta
  • Unity不直接使用资源的原始文件, 而是根据导入配置重新生成Unity中统一使用的资源
  • 可以重写某种类型资源的导入设置, 添加自定义部分
  • 大部分资源加载后即可直接使用, 少部分需要实例化后使用

资源加载和卸载的几种方式

在Unity中, 有几种资源的加载方式, 各有各的适用范围. 主要涉及到几个类的使用:

  • Resources
  • AssetBundle
  • AssetDatabase

最简单的加载卸载方式: Resources

将资源放在Assets/Resources目录(可以自行创建)后, 就可以直接使用Resources.Load("path")加载资源并使用, 且不需要文件扩展名.

使用Resources.UnloadAsset(obj)卸载资源, 需要传入资源对象.

使用Resources.UnloadUnusedAssets()卸载资源所有不再使用的资源.

这种方式最为简单, 但是该目录下的资源大小不能超过2G, 如果游戏比较小, 就可以采用这种方式, 可以极大减小资源管理的复杂度.

因为这种方式最简单, 也最快, 所以可以结合其它方式使用, 比如将基本不会变的或者游戏启动时必要的少量资源使用这个方式,然后经常变动的资源使用Ab, 最后通过热更新替换资源.

这种方式提供同步和异步加载接口.

大型项目使用最多的加载卸载方式: AssetBundle

小型项目使用Resources.Load已经足够, 但是这只是一种很粗粒度的资源管理, 在大型项目中却显得不是那么好用.

在大型项目中, 一般会使用热更的方式更新资源, 而且资源之间的依赖和管理需求更加细致, 我们需要对资源进行分类, 分块管理.

AssetBundle就是Unity提供的一种针对大型项目的资源管理方案(当然, 小项目也可以使用), 将资源分类, 分块的组织起来有条不紊的管理.

AssetBundle是将资源按照类型或者文件夹构建出一个资源包(就是所谓AssetBundle, Ab, 资产包), 使用时先加载Ab, 然后从Ab中加载资源.

使用AssetBundle.LoadFromFile("abPath")加载ab, 需要传入ab包全路径, 如Assets/Output/AssetBundle/AllAb/123.asset.

使用assetBundle.LoadAsset("fileName")从ab加载资源, 需要传入文件名(带不带后缀都可以), 或者文件全路径, 如obj.prefab或者obj或者Assets/Res/Prefabs/obj.prefab.

使用assetBundle.Unload(true or false)卸载Ab, 需要传入是否需要同时销毁从Ab中加载的资源.

使用AssetBundle.UnloadAllAssetBundles(true or false)一次性卸载所有Ab, 参数意义与上面一致.

使用Resources.UnloadAsset(obj)卸载从Ab中加载的资源.

使用Resources.UnloadUnusedAssets()卸载资源所有不再使用的资源.

简单说就是:

  • 先加载Ab, 然后从Ab中加载资源
  • 使用Resources卸载从Ab中加载的资源, 当然也可以卸载不是从Ab中加载的资源
  • 使用Ab卸载自己, 也可以同时一次性卸载从Ab中加载的所有资源

我们会用专门的文章讨论Ab, 这里只是一个简要说明.

这种方式提供同步和异步加载接口.

Editor下的加载和卸载方式: AssetDatabase

我们开发时大部分情况处于Editor模式下, 如果每次修改资源后都需要打Ab, 然后再调试, 这样会极大的降低开发效率, 所以在Editor模式下一般会使用AssetDatabase或者Resources进行资源加载和卸载.

使用AssetDatabase.LoadAssetAtPath("path")加载资源, 提供文件全路径, 如Assets/Res/Prefabs/obj.prefab.

使用Resources.UnloadAsset(obj)卸载资源, 需要传入资源对象.

使用Resources.UnloadUnusedAssets()卸载资源所有不再使用的资源.

这里简单提一下, 早期是不存在AssetDatabase这种资源管理方式的, 它是建立在Resources的基础之上, 在某些Unity版本中, Resources还保留了部分AssetDatabase接口, 只是被标记为弃用了.

当然, AssetDatabase还有很多其它接口, 我们将在其它文章讨论.

资源(Resource)和资材(Asset)

Unity中所有对象都可以被称为资源(Resource), 包括静态的和动态的.

其中静态的资源, 就是说可以持久化的资源, 被单独称为资材(Asset), 资材本身也是一种资源.

动态的资源就是游戏运行过程中, 动态生成的对象. 这些对象可以使用资材, 然后序列化下来变成新的资材.

简单的说就是:

  • 使用资材相关接口加载资材, 产生资材的引用对象:

    • obj = Resources.Load(...)
    • obj = assetbundle.LoadAsset(...)
    • obj = AssetDatabase.LoadAssetAtPath(...)
  • 使用资源卸载接口卸载资材的引用对象:

    • Resources.UnloadAsset(obj)
    • Resources.UnloadUnusedAssets()
  • 或者卸载Ab的时候, 顺便卸载资材的引用对象

    • assetBundle.Unload(true)
    • AssetBundle.UnloadAllAssetBundles(true)

但是这里有一类特殊的资材, 包括:

  • 游戏对象(GameObject)或者组件(Component): 以预制或者模型等形式存在
  • AssetBundle

这一类资材通常需要实例化后使用(AssetBundle除外), 且没有单独的卸载接口, 只能进行批量卸载, 其的正确卸载方式如下:

  • 销毁其实例化出来的游戏对象: Object.Destroy(obj); obj = null;
  • 使用Resources.UnloadUnusedAssets()卸载
  • 或者使用assetBundle.Unload(true)卸载

总结

今天简单的给大家介绍了下Unity中资源相关的基础概念, 只是提纲挈领的给大家一个先期印象, 详细的内容请参考官方文档或者后续的文章.

未来几篇文章会讨论我们资源管理的主要方式, AssetBundle, 从打包, 同步加载, 异步加载, 卸载和简单使用, 请大家继续关注.

好了, 今天的内容就是这些, 希望对大家有所帮助.


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

相关文章

【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…

大致了解一下DeepWalk

大致了解一下DeepWalk 讲到DeepWalk,不得不说的Word2VecCBOW模型CBOW模型的理解CBOW模型流程举例 Skip-Gram模型模型假任务模型细节隐层输出层直觉下一步 一些常用的trick词组降采样常用词采样率Negative Sampling选择 negative samples DeepWalk步骤相关算法 转载于…

[论文阅读] (25) 向量表征经典之DeepWalk:从Word2vec到DeepWalk,再到Asm2vec和Log2vec(二)

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

DeepWalk论文详解

DeepWalk算法报告 Deepwalk是网络表示学习的经典算法之一,是用来学习网络中顶点的向量表示(学习学习图的结构特征即属性,并且属性个数为向量的维数)。 该算法通过截断随机游走学习出一个网络的社会表示,输入是一张图…

DeepWalk原理理解:DeepWalk: online learning of social representations

文献:DeepWalk: online learning of social representations 对比阅读了几篇关于网络表示学习的文献,其中一篇包括DeepWalk的提出,下面将自己对于论文的理解和论文的笔记组织好记录下来。 deep walk 的提出是针对网络表示学习的稀疏性提出来…

DeepWalk模型的简介与优缺点

1、DeepWalk [DeepWalk] DeepWalk- Online Learning of Social Representations (SBU 2014) word2vec是基于序列进行embedding;但是,实际上实体之间的关系越来越复杂化、网络化。这个时候sequence embedding------>graph embedding。 图的定义&…

[论文阅读] (24) 向量表征:从Word2vec和Doc2vec到Deepwalk和Graph2vec,再到Asm2vec和Log2vec(一)

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

PyG基于DeepWalk实现节点分类及其可视化

文章目录 前言一、导入相关库二、加载Cora数据集三、定义DeepWalk四、可视化完整代码前言 大家好,我是阿光。 本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代…

【图嵌入】DeepWalk原理与代码实战

DeepWalk 基础理论 了解过 NLP 的同学对 word2vec 应该不陌生,word2vec 通过句子中词与词之间的共现关系来学习词的向量表示,如果你忘记了,可以看看我之前的博客: 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知…

DeepWalk算法(个人理解)

DeepWalk 什么是网络嵌入 将网络中的点用一个低维的向量表示,并且这些向量要能反应原先网络的某些特性。 一种网络嵌入的方法叫DeepWalk,它的输入是一张图或者网络,输出为网络中顶点的向量表示。DeepWalk通过截断随机游走(truncated rando…

deepwalk详解

目录 1. 算法思想2. 随机游走3. 如何把随机游走中得到的信息用来点表示学习?4.适用场景5. 不足和改进 1. 算法思想 源于word2vec,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。deepwalk则使用图中节点与节点的共现…

论文|DeepWalk的算法原理、代码实现和应用说明

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新: 万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2…