AssetBundles:可以说是U3D必须掌握的东西,它使动态管理资源成为可能,即可以在场景加载后动态的对场景中的资源进行加载,又可以版本的动态发布远程资源下载。
选择将Prefab导出而不是其它的组件对象,可以减少动态创建和绑定对象的过程,因为Prefab直接加载实例化就行了。服务器上提供每个场景的Assetbundle ,和公用模型的Assetbundle。
http://www.xuanyusong.com/archives/2373
http://www.xuanyusong.com/?p=2405&preview=true
1.AssetBundles资源导出:
[MenuItem("Custom Editor/Create AssetBunldes Main")] static void CreateAssetBunldesMain () { //获取在Project视图中选择的所有游戏对象 Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets); //遍历所有的游戏对象 foreach (Object obj in SelectedAsset) { string sourcePath = AssetDatabase.GetAssetPath (obj); //本地测试:建议最后将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,因为移动平台下只能读取这个路径 //StreamingAssets是只读路径,不能写入 //服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。 string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".assetbundle"; if (BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)) { Debug.Log(obj.name +"资源打包成功"); } else { Debug.Log(obj.name +"资源打包失败"); } } //刷新编辑器 AssetDatabase.Refresh (); } [MenuItem("Custom Editor/Create AssetBunldes ALL")] static void CreateAssetBunldesALL () { Caching.CleanCache (); string Path = Application.dataPath + "/StreamingAssets/ALL.assetbundle"; Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets); foreach (Object obj in SelectedAsset) { Debug.Log ("Create AssetBunldes name :" + obj); } //这里注意第二个参数就行 if (BuildPipeline.BuildAssetBundle (null, SelectedAsset, Path, BuildAssetBundleOptions.CollectDependencies)) { AssetDatabase.Refresh (); } else { } }
Selection:这个类用于管理你当前选中的对象。
Selection.instanceIDs; Selection.gameObjects; Selection.transforms; Selection.objects; Selection.GetFiltered(typeof(object), SelectionMode.Unfiltered);
前面四个是集合,关键是GetFiltered方法,它获取的是过滤后的结果,typeof(object),相当于按类型过滤,SelectionMode 有多种模式。
BuildPipeline.BuildAssetBundle:用于打包的方法
(obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies,BuildTarget.Android):
参数1:单个打包对象,分开打包时用到。
参数2:一个集合,里面放有多个对象,集中打包用到。
参数3:打包后生成结果的位置。
参数4:打包时的一些选项,这里选择深度获取。
参数5:打包对象的目标平台,不写是PC,BuildTarget.Android是安卓,BuildTarget.iPhone是苹果。
对游戏中所有资源进行打包,比如按类型分为五个大部分 界面,模型,特效,声音,场景,脚本。
界面部分:公用资源包(可复用的资源包)和 每个界面独有得资源包(不可复用的资源包)统一使用Prefab 打包成.assetbundle 二进制格式。
模型部分:按角色分类,统一使用Prefab 打包成.assetbundle 二进制格式。 模型部分包括模型文件与动画文件,每一个模型文件对应一组动画文件。(如果模型需要换装还需提供对应换装的模型与贴图) ,因为unity4的重定向动画不支持动态加载,所以目前不需要考虑 不同大小 不同规格 不同性别 的模型重定向动画。
特效部分: 统一使用Prefab 打包成.assetbundle 二进制格式。
声音部分: 统一使用Prefab 打包成.assetbundle 二进制格式。
场景部分:场景和前面的有点区别,场景需要导出烘培的光信息并且只能烘培场景之上永远不动的模型,但是这些永远不动的模型有可能会同时在多个场景中使用,所以场景烘培完毕后要把重复使用的对象删除,(运行游戏在动态的加载进来)场景中只保留该场景中永远不会变的模型,以及烘培的光照信息。 打包场景后会生成.unity3D 二进制格式,它和 assetbundle 打包方式是不同的。(另外,也可以考虑 json xml 二进制 来动态组装场景)。
脚本部分:如果Prefab上是带脚本打包Assetbundle的话 脚本是不会被运行的(移动平台), 但是unity有一个技巧,Prefab上的脚本 如果本地有的话它会把本地的同名脚本绑定在Prefab对象上,它会很好的执行。
加密部分: assetbundle 是可以转换成 字节数组 ,客户端与服务器约定一组解密 字节数组的算法就可以实现资源加密。
http://zhuyunblog.diandian.com/post/2012-11-10/40041955944
http://zhuyunblog.diandian.com/post/2012-11-11/40041525661
2.资源加载:
两种方式:
1.无缓存:WWW www = new WWW(BundleURL)。
2.有缓存:WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)
Instantiate:最终只是需要实例化一下就行了。
相关推荐
unity3d打包工具AssetBundles-Browser-master
官方推荐的AssetBundles管理工具,可以直接打开窗口进行打包管理
AssetBundles-Browser是一个游戏开发的辅助工具,解压缩之后将获取的项目内的Editor文件夹拷贝到我们已有的项目中,就可以在Editor的Window菜单栏里找到AssetBundle Browser了。
ab打包管理插件,更好管理ab资源的打包,可视化工具 Unity AssetBundles-Browser
Unity 官方出品的 AssetBundles 浏览器工具,直接放到Editor目录下就可以用。
Unity asssetbundle 扩展
Unity AssetBundler查看器,依赖,场景资源一目了然,亲测可用,Unity5.6以上,直接解压拖拽到Unity工程,在Windows子选项里即可使用
Unity AB包插件 ,AssetBundles-Browser
Unity3D教程:AssetBundles2
Unity3D制作并使用Assetbundles方法 Posted on 2013年07月16日 by U3d / Unity3D脚本/插件 /被围观 35 次
查看AssetBundles工具 Unity最佳伴侣 方便查看AssetBundles里内容
unity中用于动态生成assetbundle资源的插件,解压后把里面的eidtor文件夹整个复制到自己unity工程的assest目录下,在界面window下找到assestbundle browser即可导出。
yii2-assets 用于 e-frank/资产的 yii2 AssetBundles
AssetBundle打包工具,AssetBundle可视化打包
AssetBundle-Browser是Unity3D的一个可视化的打包工具,可以用来快速直观的对资源进行压缩打包
AssetBundle允许从本地或者远程服务器加载Assets资源,利用AssetBundles技术,Assets资源可以放在远程服务器上,这种技术增加了项目灵活性并且减少项目初始包的大小。 本文介绍AssetBundles并且讨论一步一步的介绍...