Unity运行时刻资源管理
原地址:http://www.cnblogs.com/88999660/archive/2013/04/03/2998157.html
Unity运行时刻资源管理
----------------------------------------------------------------------------------------
Asset Bundles
制作:BuildPipeline.BuildAssetBundle()
加载:AssetBundle.Load()
卸载:AssetBundle.Unload(bool unloadAllLoadedObjects)
unloadAllLoadedObjects = true:释放解压数据,所有已实例化的资源亦被释放。
unloadAllLoadedObjects = false:释放解压数据,已实例化的资源不释放。
Resource Folders
制作:Project视图中任意名为“Resources”文件夹下的资源,无论场景中是否用到。
加载:Resources.Load()
卸载:Resources.UnloadUnusedAssets(),实例通过Object.Destroy()释放。
工作方式: 所有Resources资源及其相关资源都存储于resources.assets中,但如果有资源被某场景使用,该资源则被存储于该场景对应的sharedassets<0~n>.assets中。 如果编译目标平台为Streaming Web Player,则情况略有不同。你可以在设置中通过First Streamed Level With Resources一项指定所有Resources资源跟随哪一场景(Level)加载。在该模式下,所有先于“First streamed Level”加载的场景,用到的Resource资源同上,都存储于其对应的sharedassets中;后于“First streamed Level”加载的场景,其用到的Resource资源,却存储于resources.assets中。
----------------------------------------------------------------------------------------
Streaming Web Players
该模式中的Streaming是以场景(Level)为单位的,你可以在编译设置中指定各个场景的载入顺序,Unity Web Player会按该顺序自发异步加载各场景。同时,Unity也提供了通过WWW加载.unity3d场景文件的API,使开发者对场景加载有更灵活的控制权。 实际上,WWW可以用于网络下载任意资源(纹理、文本、二进制文件),视频和音频也可以通过WWW下载,而且可以做到边下载边播放。
AssetBundle
----------------------------------------------------------------------------------------
想打包进AssetBundle中的二进制文件,其文件名后缀必须为“.bytes”,Unity会将其视为TextAssets对待。
AssetBundle bundle = www.assetBundle;
获取WWW.assetBundle的一刻,由WWW下载的数据压缩包被解压,AssetBundle对象被创建,此时你可以用AssetBundle.Load()实例化资源了。
除非使用AssetBundle.LoadAll()获取所有资源,否则无法得到一个AssetBundle中的资源列表。一般做法是在该AssetBundle中放置一个定好名称的TextAsset,在其中维护一份所有资源的名称列表。
一个AssetBundle包可以引用其他AssetBundle包中的资源。制作时,需要调用BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()函数对;加载时,被引用的包需要先于引用包加载。 另外,重编这种包需要开启BuildAssetBundleOptions.DeterministicAssetBundle,以保证每次重编时所使用的资源ID都是一样的。
你可以在一个游戏里使用另一个游戏的AssetBundle,前提是该AssetBundle中所引用的资源,要么存在于该AssetBundle中,要么已经被载入了游戏中。为确保AssetBundle引用的资源被编进同包中,制作时可以使用BuildAssetBundleOptions.CollectDependencies选项。
----------------------------------------------------------------------------------------
AssetDatabase Unity Editor使用AssetDatabase维护项目中的所有资源文件,Unity使用这套API取代传统的filesystem。这是一个Editor类,所以只有在名为“Editor”的文件夹下的Script中才有用。
BuildPipeline.BuildStreamedSceneAssetBundle()或BuildPipeline.BuildPlayer(..., BuildOptions.BuildAdditionalStreamedScenes)生成的场景包,使用WWW下载后,只需调用WWW.assetBundle,而不需AssetBundle.LoadAll(),即可激活包中的场景,即调用WWW.assetBundle后,你就可以通过Application.LoadLevel()来载入场景了。
Unity运行时刻资源管理的更多相关文章
- Unity中的资源管理
一.AssetBundle 相关 Q1:Unity中的SerializedFile是怎么产生的?请问用Unload(false)可以清除吗?因为读取了Bundle里面的内容后已经赋值给其他物体了.而且 ...
- 几种Unity运行平台的判断
这里就介绍几种常见的,也是便于使用的几种平台判断的方法. 1.先说第一种,也是我用的顺手的一个.利用RuntimePlatform判断,API上的解释是[The platform applicatio ...
- Unity运行错误代码处理
1.Unity在运行时出现如图错误,但不影响运行效果展示. 2.错误原因:代码不规范. 3.检查代码,查看变量是否定义正确.
- Unity运行时检测Altas使用情况
UI贴图在游戏中内存大小中占的分量非常非常大,尤其对于前期对UI没有规划的项目,无论是包量还是内存大小都是需要花费很多时间去优化.如果涉及到战斗场景和逻辑场景的情况下,常用的做法就是把两个场景使用的a ...
- 退出unity运行
public void GetExit()//退出运行 { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false;//用于退 ...
- Unity运行时保存prefab的方法一则
unity编辑器在运行状态时,prefab的apply按钮就消失了,其实此时代码访问的话是有效的. 代码如下,将会给transform的右键增加一个save prefab的选项. using Unit ...
- Android onActivityResult()运行时刻的问题
今天在开发过程中遇到一个很是怪异的问题,就是方法onActivityResult的执行问题,问题是当我从当前的Activity跳转的时候,尚未做任何动作,onActivityResult()就已经执行 ...
- AssetBundle机制相关资料收集
原地址:http://www.cnblogs.com/realtimepixels/p/3652075.html AssetBundle机制相关资料收集 最近网友通过网站搜索Unity3D在手机及其他 ...
- Unity接入多个SDK的通用接口开发与资源管理(二)
接着上篇,本篇对SDK接口进行封装.在开始之前,需要先了解下面知识. (1)unity与android之间的交互 unity通过下面方式调用android中的函数: 方法一: AndroidJavaC ...
随机推荐
- MVC采用HtmlHelper扩展和Filter封装验证码的功能
最近因为有个项目除了登录还有其他很多地方需要用到验证码的功能,所以想到了采用HtmlHelper和ActionFilter封装一个验证码的功能,以便能够重复调用.封装好以后调用很方便,只需在View中 ...
- 怎样提高Windows Azure Cloud Service中的WebRole的文件访问权限
关键字:WebRole 1. 背景 Web应用程序需要读取和写入该项目下的文件的权限. 在默认情况下,W3wp.exe 和WaIISHost.exe的运行账号是Network Service,而Net ...
- 附加到iis进程调试时找不到w3wp.exe
在进程列表的下面,有个show processes in all sessions,把它勾上就能看到了
- chromiun 学习《一》
众所周知,Chrome是建立在开源的Chromium项目上的. 而且不得不说,学习并分析开源项目的代码对一个程序员的提高确实蛮大的.这篇博文我会记录一下学习过程中我遇到的一些问题,并分享学习中我所参考 ...
- OC基础--description方法
PS:经过之类重写description方法后,个人感觉有点像C#中的ToString();方法 一.description方法的作用:(输出所有的OC对象都用%@) 1.默认情况下(不重写descr ...
- Spring 使用中的设计模式
1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类. ...
- 【POJ 1416】Shredding Company
题 题意 给你一个target number,和一个最多六位的数num,让你把数分段,使总和最接近但不大于target number. 如果只有一种方法就输出总和.分段,如果有多种方法,输出rejec ...
- Codeforces 295A Greg and Array
传送门 A. Greg and Array time limit per test 1.5 seconds memory limit per test 256 megabytes input stan ...
- 《驾驭Core Data》 第二章 Core Data入门
本文由海水的味道编译整理,请勿转载,请勿用于商业用途. 当前版本号:0.4.0 第二章 Core Data入门 本章将讲解Core Data框架中涉及的基本概念,以及一个简单的Core Data ...
- 代码重构-2 简单不变的 if else 用字典代替
原代码 private string GetExDesc(string lotteryCode) { string exDesc = "抽奖"; if (lotteryCode.T ...