`

AssetBundles

    博客分类:
  • U3D
 
阅读更多

 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-Browser是Unity社区开发的一款工具,它帮助开发者更便捷地管理和打包AssetBundles。 AssetBundles是Unity3D中的一种资源打包机制,它允许开发者将游戏中的资源(如模型、纹理、音频、动画等)单独打包...

    AssetBundles-Browser-master

    AssetBundles是Unity3D引擎中的一个重要特性,用于实现资源的动态加载和管理,从而优化游戏或应用的性能和内存占用。AssetBundles-Browser-master是一个针对Unity3D的AssetBundle管理工具,它旨在帮助开发者更高效、...

    AssetBundles-Browser-master.zip

    AssetBundles是Unity引擎提供的一种资源管理方式,用于在运行时动态加载和卸载游戏内容。这个"AssetBundles-Browser-master.zip"文件是一个Unity插件,专门用于查看和管理AssetBundles,它能帮助开发者更直观地了解...

    AssetBundles-Browser.zip

    AssetBundles-Browser.zip是一个专为Unity开发人员设计的实用工具,它简化了AssetBundle的管理和打包过程。AssetBundles是Unity引擎中的一个重要概念,它们允许开发者将游戏资源(如模型、纹理、音频等)单独打包,...

    AssetBundles查看器

    AssetBundles查看器是一款专为Unity开发者设计的强大工具,它极大地简化了AssetBundles内容的检查和分析过程。在Unity游戏中,AssetBundles是用于动态加载和管理游戏资源的重要机制,能够实现按需加载,降低游戏初始...

    AssetBundles Browser

    AssetBundles浏览器是Unity官方提供的一款实用工具,主要用于管理和浏览AssetBundles资源。AssetBundles在游戏开发中扮演着至关重要的角色,它们是一种高效的资源打包和分发方式,能够帮助开发者实现动态加载和卸载...

    进击的AssetBundles和它的工具们

    AssetBundles-Browser是一个游戏开发的辅助工具,解压缩之后将获取的项目内的Editor文件夹拷贝到我们已有的项目中,就可以在Editor的Window菜单栏里找到AssetBundle Browser了。

    AssetBundles-Browser) Unity资源AB包打包工具

    AssetBundles-Browser是针对Unity引擎的一个强大工具,专门用于管理、打包和浏览AssetBundle资源。AssetBundles在Unity开发中扮演着至关重要的角色,它们允许开发者将游戏资源(如模型、纹理、音频等)打包成独立的...

    Unity3d案例项目+Unity3d-AssetBundles

    在Unity3D的使用过程中,AssetBundles是一个非常重要的功能,它允许开发者把游戏资源打包成资源包,以便于动态加载和卸载,这对于游戏资源的管理以及提高游戏性能都具有重要的意义。 AssetBundles是Unity3D引擎提供...

    Unity3D教程:AssetBundles2

    Unity3D的AssetBundles是一种强大的资源管理技术,它允许开发者动态地加载和卸载游戏中的资源,从而实现按需加载、降低初始包大小、优化性能等目标。在本教程中,我们将深入探讨AssetBundles的基本概念、创建方法、...

    Unity3D制作并使用Assetbundles方法1

    AssetBundles是Unity3D中一个重要的资源管理功能,它允许开发者将游戏资源(如模型、纹理、音频、动画等)打包成独立的文件,以便在运行时动态加载和卸载,从而优化游戏性能和降低初始加载时间。 制作AssetBundles...

    AssetBundles-Browser

    AssetBundles-Browser 是一个专为Unity开发设计的工具,用于简化AssetBundle的打包和管理过程。AssetBundle是Unity引擎中的一个重要概念,它允许开发者将游戏或应用中的资源(如模型、纹理、音频等)单独打包,以...

    AssetBundle资源加载,AssetBundle-Browser打包助手

    1. **创建AssetBundle**:首先,你需要选择要打包的资源,如纹理、模型、音频文件等,然后使用Unity的AssetBundle浏览器(AssetBundle-Browser)工具来创建AssetBundles。AssetBundle-Browser是一个可视化的工具,它...

    AssetsBundle资源打包工具

    AssetBundles-Browser-master可能是一个开源工具,用于可视化的浏览和管理Unity项目的AssetsBundle。它提供了界面,帮助开发者查看每个AssetBundle的内容,检查资源之间的依赖关系,以及进行打包和加载的测试。 总...

    Unity生成assetbundles资源的插件

    unity中用于动态生成assetbundle资源的插件,解压后把里面的eidtor文件夹整个复制到自己unity工程的assest目录下,在界面window下找到assestbundle browser即可导出。

Global site tag (gtag.js) - Google Analytics