标题: 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
必須支持版主奉獻的精神