Unity5 Assetbundle简单使用 及 打包Material文件超大的问题

因为项目中要用到ULUA,而ULUA的Demo 中用到的是 Unity5的Assetbundle 打包方式,所以还是学习下 5.0 版本的Assetbundle 打包方式。


简单的来说,Unity5中新添加的 AB 打包,和我们平时使用的方式一样,原理就是 为每个文件创建一个依赖文件,然后汇总到一个总的依赖文件中,在游戏最开始运行的时候需要加载这个 总的依赖文件,然后加载 Assetbundle的时候,从中获取到依赖关系来加载依赖。


Unity5的打包Assetbundle API使用起来很方便


1、为每个需要被打包的资源设置一个 Assetbundle 名字。



2、使用代码打包,如下是例子中使用的打包代码:

using UnityEngine;
using UnityEditor;
using System.Collections;

public class BuildAssetbundle : Editor
{
	[MenuItem("BuildAssetbundle/BuildAll")]
	static void Build()
	{
		BuildPipeline.BuildAssetBundles(Application.dataPath+"/../Assetbundle",BuildAssetBundleOptions.UncompressedAssetBundle);
	}
}

打包后就可以收获一堆 Assetbundle 文件以及同样数量的 Manifest文件。



很简单很方便哦,是不是。

但是仔细看却发现一个坑,项目中的两个 材质 Material 文件 Mat1、Mat2 打包出来怎么这么大,坑啊……


心理想着Unity 还是一堆Bug,然后去下载了官方的Demo。发现Demo却没有这个问题,对比了 Material发现。

图片默认拖到Assets 中,然后生成的 Material ,Shader 默认选得是 Stander

而Unity官方Demo却选择了具体的一个Shader。


我猜测 选择 Stander后,打包Assetbundle 的时候把所有 Shader都打包进去了。

所以这个一定要注意。


然后来看加载的代码:

using UnityEngine;
using System.Collections;

public class LoadAssetbundle : MonoBehaviour {
	
	void OnGUI()
	{
		if(GUILayout.Button("LoadAssetbundle"))
		{
			//首先加载Manifest文件;
			AssetBundle manifestBundle=AssetBundle.CreateFromFile(Application.dataPath+"/../Assetbundle/Assetbundle");
			if(manifestBundle!=null)
			{
				AssetBundleManifest manifest=(AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
			
				//获取依赖文件列表;
				string[] cubedepends=manifest.GetAllDependencies("myresources_cube");
				AssetBundle[] dependsAssetbundle=new AssetBundle[cubedepends.Length];

				for(int index=0;index<cubedepends.Length;index++)
				{
					//加载所有的依赖文件;
					dependsAssetbundle[index]=AssetBundle.CreateFromFile(Application.dataPath+"/../Assetbundle/"
					                                                     +cubedepends[index]);


				}

				//加载我们需要的文件;
				AssetBundle cubeBundle=AssetBundle.CreateFromFile(Application.dataPath
				                                                  +"/../Assetbundle/myresources_cube" );
				GameObject cube=cubeBundle.LoadAsset("Cube0") as GameObject;
				if(cube!=null)
				{
					Instantiate(cube);
				}
			}


		}
	}


}

很简单的使用方法。有图有真相。


当然,要让我们手动去设置每一个资源的 Assetbundle 名字太麻烦了,所以我们还是使用脚本自动生成名字吧。

/************************** 
     * 文件名:AutoSetTextureUISprite.cs; 
     * 文件描述:自动设置Assetbundle名字为文件夹名_文件名.unity3d; 
     * 创建日期:2015/05/04; 
     * Author:陈鹏; 
     ***************************/  

using UnityEngine;  
using System.Collections;  
using UnityEditor;  

public class AutoSetTextureUISprite :AssetPostprocessor   
{  

	static void OnPostprocessAllAssets (string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) 
	{
		foreach (var str in importedAssets)
		{
			//Debug.Log("Reimported Asset: " + str);
	
			if(!str.EndsWith(".cs"))
			{
				AssetImporter importer=AssetImporter.GetAtPath(str);
				importer.assetBundleName=str;

            }

		}
		foreach (var str in deletedAssets) 
		{
			//Debug.Log("Deleted Asset: " + str);
			if(!str.EndsWith(".cs"))
			{
				AssetImporter importer=AssetImporter.GetAtPath(str);
				importer.assetBundleName=str;
            }
        }
		
		for (var i=0; i<movedAssets.Length; i++)
		{
			//Debug.Log("Moved Asset: " + movedAssets[i] + " from: " + movedFromAssetPaths[i]);
		}
	}
}  

当文件拖入到工程或者 Reimport 就会自动设置 AssetbundleName 为文件路径名,然后打包的时候就会打包到对应的目录中。


工程下载:

http://download.csdn.net/detail/cp790621656/8801445




本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言。在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来记一下吧,感谢大神团队贡献如此实用的开源框架,这里是OrmLite的官方网址: http://ormlite.com/ 准备工作–创建数据库及数据表 ORMlite通过Java注解的方式来建立起与数据库的映射关系,在这里我们以一个实例来进行说明,如我们现在想要建立一个简单的数据库test.db并创建一张表pe

openwrt 抓取流量包 - 2015-06-25 11:06:46

编译内核时支持tcpdump工具 Network --- * tcpdump 编写抓包脚本,内容如下: #!/bin/ashSTIME=`date +%F"@"%H%M%S`DUMPPID=`ps | grep "tcpdump" | grep "3g-ppp0"`if [ -n $DUMPPID ]then/usr/sbin/tcpdump -i 3g-ppp0 -C 100 -w /mnt/sda1/${STIME}.cap -s 0 fi 编辑定时执行: crontab -e 加入一下内容: */1
iOS 最常见的获取系统版本号的方法是: [[[UIDevice currentDevice] systemVersion] floatValue] 但是,这个floatValue是不靠谱的,这也算是iOS SDK的一个bug吧。看一下上面的函数在8.2系统上的表现。 如果代码中有 if( version = 8.2) 的判断,则该判断会失效! 所以,还是使用字符串对比版本号比较靠谱。

IOS开发之地图导航 - 2015-06-25 11:06:35

一、问题描述 现在很多的APP 都开始引入了地图和定位功能,包括一些餐饮业,团购等。他们都过定位和地图来让用户更加方便的根据自己的位置找到合适的目标,也就是说,现在地图定位已经不再是导航工具类,地图工具类所特有的了,本文将着重介绍下如何自行导航。运行效果图如下:   二、实现步骤   一通过故事版添加地图界面,以及导航按钮(由于操作过于简单本文不便列出)   二要想完成导航必须要了解起始的位置,不然无法完成导航,本文采用两个特殊的地名作为例子,实际开发中可以根据网络定位当前的位置,这里我们引入类CLGeo
罪过啊,已经有一个月没有写blog了(转载不算)。年末了各种加班,搞得身累心累的,也没有那心情写。但是春节临近,适逢今天放假,我再也不能抑制内心的那份冲动,必须得写几篇blog抒发一下新春佳节即将到来的这份愉快。 这几篇blog主要就是android的源码和自己的总结,有可能还有demo。我发现阅读android的源码是件很令人开心的事情,因为android源码够难,需要理清作者思路,揣测作者的意图,这是很有趣的事情,而且楼下还有一群大妈在跳舞助兴,一首不知道叫什么名的歌单曲循环了一个下午,我也是醉了,醉
因为这几天碰到一个Unity的Bug,不得不去反编译DLL看看C#代码的生成中间件代码。这也用到了一些反编译以及重新编译DLL的一些知识,意味到Unity是如此的不安全。 首先我们新建一个工程,创建一个脚本,写一句很简单的代码: using UnityEngine;using System.Collections;public class crack1 : MonoBehaviour {// Use this for initializationvoid Start () {Debug.Log("123"
题目来自于: https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 这一题目其实我想说的还不是我的代码,是之前在写代码中遇到的一个bug问题。后面会进行详细的解释 Construct Binary Tree from Preorder and Inorder Traversal   Total Accepted:  35628   Total Submissions:  134968
      在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库, 关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释。.so本是linux下的文件类型,所以编译.so必须要在linux环境下,那么如何在win下进行编译呢?随便在网上搜下,教程也是五花八门,不清不楚,没有一定功底,即便看着教程到最后估计还是功败垂成,更别说初学者,看了保证头晕眼花,本人也是根据网上的一些例子,总结了一个个人认为还算比较简单的一个.so的编译方法:GNUstep

APP开发,用技术解放技术 - 2015-06-25 10:06:36

移动互联网的发展,使得 app开发 一度如火如荼。然后,开发一款APP并非易事,从前期创意、团队建设、技术开发、应用上线后的市场推广,开发者将面临一系列问题。 既然打造一款成功的APP如此困难,有些开发者就把重点转移到APP开发平台的搭建——用技术解放技术,帮助没有技术背景的用户,轻松制作app,满足特定环境下、特定人群的定制需求。   中兴通讯(香港)旗下的“ 应用之星 ”,就是“用技术解放技术”的典型代表。“应用之星”现已开发出一键电子书、一键淘宝、一键音乐、一键图文等众多功能,集制作免费、操作便捷、

可扩展的android重打包工具 - 2015-06-25 10:06:34

今天看了一下当初的打包工具。学习了点技术。然后git上找了个相似的工程代码研究了一下。觉得制作一个脚本语言的工具会快很多。而程序员很多时候是不需要一个接着一个打包的。对于程序员来说只需要使用几句代码就能描述自己做的一些事情。因此应该讲这些重复劳动的东西写出来。 简单学习了一下打包工具的原理。是使用一个apkTool的工具来对apk进行解压缩和重签名的。在github上许多是使用ant的打包工具打包。而我看到了一个demo是使用此工具解压缩文件并重签名的。作者将一些东西写出了配置文件。不过网上许多工具修改的