Unity3d C#脚本学习小结(九) [创建AssetBattle]
来源:互联网 发布:淘宝母婴包括哪些类目 编辑:程序博客网 时间:2024/05/17 03:34
都快一年没有写博客了,一直在忙着, 现在继续写我的Unity小经验,希望对像我这样刚学习Unity的开发爱好者有一定的帮助,各界人士发现错误的,给予指正。
以前一直没有做游戏内更新游戏,最近使用了Unity中的资源包,这个可以完成游戏的内部资源更新下载,不用让用户再次下载游戏,重新安装了,如果重新下载,这么大的流量,玩家会骂人的,好了,废话不多说,上菜。
我们知道游戏内更新是要下载游戏包的, 我们就用Unity打包出来,我在网上看到有的是打包成.unity3d格式的,也看过宣雨松的,他是打包成.assetbattle格式,其实我还是习惯用.unity3d格式。
第一步,创建一个脚本,命名为AssetPackageTool,在这个里面添加打包的脚本,贴上代码,大家看吧,
using UnityEngine;using System.Collections;using UnityEditor;[AddComponentMenu("AssetPackageTool")]public class AssetPackageTool : MonoBehaviour {/// <summary>///将选中的资源打进一个资源包 /// </summary>[MenuItem("AssetPackageTool/CreateAssetsInOnePackage")]static void CreateAssetsInOnePackage(){Caching.CleanCache();string path=Application.dataPath+"/StreamingAssets/version.unity3d";Object[] selectedAssets=Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets);if(BuildPipeline.BuildAssetBundle(null,selectedAssets,path,BuildAssetBundleOptions.CollectDependencies))AssetDatabase.Refresh();elseDebug.LogError("打包失败!");}/// <summary>/// 将选中的每一个资源打成一个资源包/// </summary>[MenuItem("AssetPackageTool/CreateAssetPerPackage")]static void CreateAssetPerPackage(){Object[] SelectedAsset=Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets);foreach (Object item in SelectedAsset) {string sourcePath=AssetDatabase.GetAssetPath(item);string targetPath=Application.dataPath+"/StreamingAssets/"+item.name+".unity3d";if(BuildPipeline.BuildAssetBundle(item,null,targetPath,BuildAssetBundleOptions.CollectDependencies)){Debug.Log("success");}else{Debug.Log("Failure");}}AssetDatabase.Refresh();}/// <summary>/// 将场景打成一个包/// </summary>[MenuItem("AssetPackageTool/CreateScenePackageInOne")]static void CreateScenePackageInOne(){Caching.CleanCache();#if UNITY_EDITORstring path=Application.dataPath+"StreamingAssets/scenePackage.unity3d";string[] levels={"Assets/Daikon Forge/Examples/ActionBar/ActionBar.unity"};BuildPipeline.BuildStreamedSceneAssetBundle(levels,path,BuildTarget.WebPlayer,BuildOptions.BuildAdditionalStreamedScenes);AssetDatabase.Refresh();#endif}}
这样的话,我们就可以在菜单中使用这个脚本了,你会发现Unity顶部菜单栏会有AssetPackageTool选项,在选择之前先在项目中创建一个文件夹(StreamingAssets),因为打包都会打到这个文件夹中;先选择你需要打包的资源,然后点击按钮,就会发现StreamingAssets中有你刚才打的包了。第二步:部署一个ftp,或者是一个网站,总之开放一个连接,可以下载到你的文件,当然你也可以使用file://,
第三部:通过unity的www下载你的资源包的路径,然后实例化出来,
using UnityEngine;using System.Collections;public class UpdateGameVersion : MonoBehaviour {//public static readonly string URLHead="file://"+Application.dataPath+"/StreamingAssets/";//地址头部#if UNITY_VERSIONpublic static readonly string URLHead="ftp://192.168.0.1/version1/Interface.unity3d";//地址头部#endif#if UNITY_ANDROIDpublic static readonly string URLHead="http://";//地址头部#endifpublic string fileName;WWW data=null;void OnGUI(){if(GUI.Button(new Rect(100,100,200,50),"点击更新")){StartCoroutine(loadBundleObject("Interface.unity3d"));}if(data!=null){Debug.Log((data.progress * 100).ToString() +"%");GUI.Label(new Rect(0,0,200,100),"loading " + (data.progress * 100).ToString() +"%");}}/// <summary>///加载资源 /// </summary>/// <returns>The bundle object.</returns>/// <param name="filename">文件名称(包含扩展名)或者服务器地址</param>IEnumerator loadBundleObject(string filename){data=WWW.LoadFromCacheOrDownload("ftp://192.168.0.1/version1/Interface.unity3d",1);yield return data;//Instantiate(data.assetBundle.Load("Cube"));Instantiate(data.assetBundle.mainAsset);data.assetBundle.Unload(false);}}
WWW.LoadFromCacheOrDownload是可以通过版本号下载的,在下载之前会先检查是否已经下载过该版本,如果有了,就直接从缓存中读取,否则就网络下载;
0 0
- Unity3d C#脚本学习小结(九) [创建AssetBattle]
- Unity3d C# 脚本学习小结 (三) 【创建网络服务器】
- Unity3d C# 脚本学习小结(二) 【常用方法】
- Unity3d C# 脚本学习小结(一)开篇语
- Unity3d C#脚本学习小结(七)[OnTriggerEnter的使用方法]
- Unity3d C# 脚本学习小结(四)【怎么设置材质的Png图片部分透明】
- Unity3d C#脚本学习小结(八)[Mesh Collider的使用]
- unity3d 更改C#脚本创建模版
- Unity3D 学习 - 通过C#脚本创建简单的按钮、响应事件
- Unity3D学习笔记(九)模型导入
- Unity3D学习笔记(九)模型导入
- Unity3D脚本-C#
- Unity3D C#脚本基础
- Unity3D-C#脚本
- Unity3d C#学习小结(五)[关于不同平台的条件编译]
- Unity3D C#学习小结(六)[使用TrailRender做漂亮的特效]
- C#设计模式学习小结之九 原型模式
- Unity3D UGUI学习小结
- 使用OpenCV和多线程编程实现摄像头实时播放
- android NDK编译gzip
- Uevent 上报event事件给上层的详细讲解
- 世上没有无缘无故的爱,更没有无缘无故的恨
- traceroute
- Unity3d C#脚本学习小结(九) [创建AssetBattle]
- GDB中应该知道的几个调试方法
- 【HEVC学习与研究】26、HEVC的算数编码实现
- SQL操作常规语法【以后遇到更加好的,我会继续整理】
- leetcode: Longest Substring Without Repeating Characters
- 多线程与锁的知识小结
- ZOJ 1240 IBM Minus One
- poj 2892 Tunnel Warfare
- oracle 10g recyclebin引起的dba_free_space性能问题