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 ...
随机推荐
- mongo里面根据对象字段的ID查询 db.Photo.find({'owner.$id':ObjectId('xxxx')}) , 并且使用forEach循环修改查询的数据
var ones = db.Photo.find({'owner.$id':ObjectId("5344f0dab7c58e8e098b4567")}) db.Photo.find ...
- jquery的常用的容易忘记的东西
1.浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异 http://www.jb51.net/article/57336.htm 2. jquery的each方 ...
- 23.C#Queryable的扩展方法(十二章12.1-12.2)
今天要写的知识还真心有点绕呢,对于第一节的内容,其实是把原先在内存中的数据源,换成了从数据库中提取出来的数据.从代码的使用方式上是一样的,直接跳过,来看看IEnumerable和IQueryable的 ...
- AngularJS开发指南2:AngularJS初始化过程
自动初始化 请将ng-app指令放到你应用的标签节点中, 如果你想要AngularJS自动执行整个<html>程序就把它放在 <html> 标签中.比如:<html ng ...
- C语言总结(6)
1.表达式: 算数表达式: 单目:+, -, ++, --. 双目:+,-,*,/,%. 赋值表达式: 简单赋值:= 复合赋值:+=,-=,*=,,/=%=,!=. 关系表达式: >,>= ...
- 转:java多线程--同步容器
java同步容器 在Java的集合容器框架中,主要有四大类别:List.Set.Queue.Map.List.Set.Queue接口分别继承了Collection接口,Map本身是一个接口.注意Col ...
- MyEclipse内存不足问题
1.修改eclipse.ini 在Myeclipse安装目录下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一个myeclipse.ini配置文件,设置如下: -vma ...
- struts2动态方法
动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多 第一种方式:指定method属性 这种方式我们前面已经用到过, ...
- wordpress中如何禁止或者屏蔽更新提示
WordPress禁止,插件更新,主题更新,wordpress本身更新提示的方法 禁止wp更新 : open file "wordpress\wp-includes\update.php&q ...
- TRUNC函数,ORA-01898 精度说明符过多
TRUNC(SYSDATE)即可默认当前日期(年月日),TRUNC(SYSDATE,'yyyy-mm-dd'),精度说明符过多