Unity3D - 资源管理

一直没有总结过Unity的资源管理,都是随用随看文档。今天有人问,竟然没回答上来,说起来也做了两款Unity游戏,惭愧。这里总结一下,加深自己对Unity资源管理的理解。主要参考了Unity官方文档之ResourcesAssetBundle

Unity有两种动态加载资源的方式,Resources.Load和AssetBundle。Resources.Load用于加载打进游戏包内Resources目录下的资源,AssetBundle用于加载包外自己打的资源包(使用BuildPipeline.BuildAssetBundle),常用于做动态更新。下面结合API具体说明:

加载:

Resources.Load:加载app包内Resources/目录的一个asset;

Resources.LoadAsync:Resources.Load的异步方法;

Resources.LoadAll:类似Resources.Load,但是用于加载某目录下所有asset;

Resources.LoadAssetAtPath:加载Asset/目录下的资源,方便,但是只能用于编辑器模式,写打包工具时可能用到;

AssetBundle.CreateFromFile:从磁盘加载一个AssetBundle,这是加载AssetBundle最快的方式(我查到有人说这种方式只能用于pc,官方文档没提有这个限制,待检验);

AssetBundle.CreateFromMemory:从内存中创建一个AssetBundle,异步方法;

AssetBundle.CreateFromMemoryImmediate:AssetBundle.CreateFromMemory的同步方法;

AssetBundle.LoadAsset:从AssetBundle中加载一个asset;

AssetBundle.LoadAssetAsync:AssetBundle.LoadAsset的异步方法;

AssetBundle.LoadAllAssets:加载AssetBundle中所有指定类型的asset;

AssetBundle.LoadAllAssetsAsync:AssetBundle.LoadAllAssets的异步方法;

WWW.LoadFromCacheOrDownload:从缓存或网络上下载后加载AssetBundle,不需担心设备空间不足;

卸载:

Resources.UnloadAsset(Object assetToUnload):卸载指定的asset,只能用于从磁盘加载的;如果场景中有此asset的引用,Unity会自动重新加载它;

Resources.UnloadUnusedAssets:卸载所有未被引用的asset,可以在画面切换时调用,或定时调用释放全局未使用资源;

AssetBundle.Unload(false):卸载AssetBundle的压缩文件数据(文件内存映像);

AssetBundle.Unload(true):卸载AssetBundle文件内存映像,并且释放所有已加载的asset;如果asset在场景中被引用,会丢失;

Object.Destroy:销毁一个GameObject、组件或asset;并不是立即销毁,而是在Update循环之后,渲染之前;

Object.DontDestroyOnLoad:标明一个对象在切换场景时不被销毁;

GC.Collect:强制垃圾收集器立即回收内存,可以根据需要使用,比如切换画面调用或定时调用;

通过看Unity的这些API说明,可以清晰地了解Unity的动态资源管理了。下面这幅图描绘的更清晰:

时间: 2024-10-03 21:26:41

Unity3D - 资源管理的相关文章

Unity3D资源管理架构

在Unity3D引擎中,场景资源文件(.unity)是以2进制格式存储的,但同时它也有一种基于文本的表现格式.可在Edit>Project Setting>Editor 中设置: 1.使用binary2text.exe(win下目录:Editor\Data\Tools)可将.unity文件转换成.txt文件,只需将.unity文件拖拽到binary2text.exe上即可生成.txt: 2.Bin2Text.unity为测试场景场景中只有一个名为"sakyaer"的空物体:

资源 Des加密

Unity3d资源管理分析 http://blog.csdn.net/sgnyyy/article/details/39268215 打包资源 http://www.cnblogs.com/sifenkesi/p/3915477.html 打包前平台检测 http://www.cnblogs.com/sifenkesi/p/3678902.html 场景资源打包 http://www.cnblogs.com/sifenkesi/p/3598569.html AssetBundle系列——资源的加

unity3d的资源管理和热更新方案

之前开发一直使用cocos2dx,最近开始搭建unity3d的框架,遇到的一个大问题就是热更新.虽然代码采用了slua脚本,unity3d官方也提供了assetbundle这样的解决方案,但是还是有好多的问题需要解决. 1.复杂的资源引用方案.cococ2dx的更新方案很简单--添加附加searchpath,这样只要设置更新文件所在的路径,就能保证优先使用最新资源.但是unity3d并不是这样,因为它没有cocos2dx的FileUtils,没办法控制所有资源的加载.unity3d的资源来源有这

Unity3D保护资源管理文件的AssetBundle包加密!

保护资源管理文件的相关内容 Unity允许用户使用AssetBundle.CreateFromMemory从一个 byte[]数组中建立一个AssetBundle的对象.在运行传输解密时,可以用这种加密方法来提高安全性和保护用户建立的资源管理中的内容. string url = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d"; IEnumerator Start () { // Start a do

浅析游戏引擎的资源管理机制——扒一扒Unity3D中隐藏在背后的资源管理

      游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管理,让游戏开发者用最简单的方式使用资源.游戏引擎的资源管理包括两大部分:离线资源管理和运行时资源管理.本文仅对前者进行简要介绍,并结合Unity3D和OGRE进行分析. 资源创作与导出 游戏中的资源由各种数字内容创作工具(DCC, digital content creation)进行创作,如: 三维模型:3ds Max,Maya等: 纹理:Photoshop等: 音乐

unity 资源管理器设计

资源管理器,顾名思义,就是管理游戏中的所有资源,包括加载资源,回收资源,销毁资源等等.下面这个资源管理器主要提供了对assetbundle异步加载功能,Resources的加载没有放在里面. 一.使用方法 1.在进入游戏前调用Init(),加载一个资源的名称列表 2.调用AsynGetAsset(string name, Action<UnityEngine.Object> callback)方法(异步) 说明,这里的资源列表是从bundle_list列表中解析出来的,并且有一个manifes

基于Unity3D引擎制作大地图

基于Unity3D引擎制作大地图 1.下载Unity3D: http://www.devzone.cn/thread-17305-1-1.html 2.制做一张灰度图: 需求:Photoshop GIMP 先Google 搜 WorldMap-A_non-Frame.png  这个地图下载一张到你pc 然后gimp打开它, 右键图片,弹出菜单--选择--按颜色. 这张图的好处在于海洋就是几种蓝色,按照颜色分别  左键 选取这几个蓝色,按下delete键删除颜色,清理干净后如图[狗刨学习网] 然后

U3D学习心得-----资源管理:模型和角色动画的输出设置(上)

模型主要可以以两种方式进行输出: (1)使用插件进行输出.并输出为指定的文件格式,如FBX或OBJ (2)直接输出为响应的3D应用文件,如.max或者Blen,Unity自身再进行转换. 使用3D软件包自身格式进行输出的优缺点: 优点:(1)快速的输出工程,直接从3D文件到Unity (2)简单的初始化过程 缺点:(1)文件中可能会包括不需要的数据. (2)若输出文件过大,可能会妨碍Unity的更新工程.比较少的数据检验过程,可能会增加出错的几率. 而使用插件进行输出的优缺点: 优点:(1)仅仅

漫步Unity3D(一)

前言 采用Unity它已经将近半年的时间,虽然项目仅仅是一个半成品.但Unity熟几乎相同的游戏.在这里,在使用过程中遇到的问题,再梳.不涉及过于详细的功能和代码.但是,假设他们将参与开发一个在线知识点,这样的直击"本质"的"答案"是非常多教学书籍所不具备的. 一.背景介绍:什么是Unity 2013年手游如火如荼,开发了端游页游之外的第三战场. 而随着手游品质的逐渐提高(越来越多的大公司開始介入手游领域,手游不管从画面还是内容都直逼端游).Unity開始为越来越多