纳金网

标题: unity动态数据管理教程—AssetBundles [打印本页]

作者: paopao    时间: 2013-3-6 16:48
标题: unity动态数据管理教程—AssetBundles
unity动态数据管理教程—AssetBundles在我们做游戏的时候,往往需要加载大容量的数据文件,其中包括模型、材质、贴图、特效等资源。这些资源组成了游戏场景,多个游戏场景就组成了我们的游戏了。这些加在一起数据量非常大,对于良好的人机交互体验而言,让用户处于长时间的等待,是一种非常差的体验感,很多用户很可能就是因为没有耐心等待,就直接关闭你的应用,离开。  所以,做任何的项目之前,必须要先解决场景数据管理的问题。Unity3d是通过AssetBundles的外部整合数据,其实就是将我们做好的unity场景以一种特定的.unity文件存储的服务器上,然后根据需要有选择的加在他们,这样就避免游戏一开始要加载大量的场景。而是可以一边玩游戏一边加载。   下面演示创建AssetBundles的过程和方法:在AssetBundles中,共有三种方法来创建数据资源。o    BuildPipeline.BuildAssetBundle, 可以创建任意类型的的资源包,这是一个压缩好的,包含所有预置物(prefabs)、贴图、模型和动画信息的unity3d文件。 o    BuildPipeline.BuildStreamedSceneAssetBundle,用来创建数据流文件,是数据远程加载的方法,利用这种方法建立的数据文件,通常是一个单一的unity3d文件。使用WWW类来进行传输,加载完毕后使用WWW.LoadFromCacheOrDownload来加载下载好的场景文件。 o    BuildPipeline.BuildAssetBundleExplicitAssetNames,这种方法同BuildPipeline.BuildAssetBundle类似,但是提供额外的参数来指定每个物体的自定义的字符串(名字)。 好吧,下面就具体制作了,创建一个c#文件。命名为ExportAssetBundles,并输入如下代码:// C# Example // Builds an asset bundle from the selected objects in the project view. // Once compiled go to "Menu" -> "Assets" and select one of the choices // to build the Asset Bundle   using UnityEngine; using UnityEditor;   public class ExportAssetBundles { [MenuItem("Assets/Build AssetBundle From Selection - Track dependencies")] static void ExportResource () { // Bring up save panel string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d"); if (path.Length != 0) { // Build the resource file from the active selection. Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets); Selection.objects = selection; } } [MenuItem("Assets/Build AssetBundle From Selection - No dependency tracking")] static void ExportResourceNoTrack () { // Bring up save panel string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d"); if (path.Length != 0) { // Build the resource file from the active selection. BuildPipeline.BuildAssetBundle(Selection.activeObject, Selection.objects, path); } } }该脚本必须存储在unity3d项目(Project)面板的Editor目录下。这时候,在菜单Assets中,我们会发现多了两项新的菜单列表。 1.Build AssetBundle From Selection - Track dependencies,顾名思义,它能通过当前选中的物体创建AssetBundles数据资源,并且该数据资源包含所有的关联物体。比如,子物体和其他组件(components)。 2.Build AssetBundle From Selection - No dependency tracking,很明显,这种方法同上面是相对应的,它不包含关联物体,而仅仅输出选中物体本身。下面我们制作一个简单的场景,并将其保存的一个Prefabs中:然后在Prefabs文件夹上点击右键,选择.Build AssetBundle From Selection - Track dependencies导出.unity文件。存储在G盘目录(这个地址可以自己选择)这样.unity文件就生成出来了。下面看下简单的调用。新建一个JS文件。命名为Myasset。输入一下代码:function Start () {    //开始下载    var www = WWW ("file:///G://New Resource.unity3d");    //等待下载完成       yield www;    print(www);    //获取指定的主资源并实例化    Instantiate(www.assetBundle.mainAsset);    }www为你的.unity的存储路径。运行游戏,就可以调用成功了。
作者: 雅雅    时间: 2013-3-6 18:07
希望楼主能加入一下应用的案例,这样更容易理解,谢谢了!

作者: Sora    时间: 2013-3-9 09:13
必須支持版主奉獻的精神


作者: Sora    时间: 2013-3-20 19:18
簡單易懂 學習了唷!!!

作者: 烟雨    时间: 2013-6-28 19:56
学习学习,,很不错的说明!
作者: pz789as    时间: 2014-2-7 16:21
这个很不错啊。。
作者: 川流不息    时间: 2014-2-7 22:51
好东西呀,谢谢楼主了!
作者: wulong    时间: 2014-2-12 08:46
很好的东西,详细学习下
作者: 我没有过去    时间: 2014-2-12 13:07
学习了,感谢
作者: aoikalin    时间: 2014-2-12 14:50
谢谢楼主分享
作者: tangqizuse    时间: 2014-2-20 23:31
新人学习,谢谢分享
作者: GameOver    时间: 2014-2-28 16:33





欢迎光临 纳金网 (http://www.narkii.com/club/) Powered by Discuz! X2.5