Unity5.x 怎样在assetbundle打包场景时候设置mainasset

& Unity打包Assetbundle时,要想将Shader一起打包,需要注意两种Shader:项目中自建的Shader文件和Unity内置的Shader文件。自建的Shader文件在Unity项目中是可以看到的,而Unity内置的Shader文件只能在项目中使用,但是项目中找不到这个文件,因为这个文件是在Unity的安装目录中,然后在Unity项目中通过某种映射关系来引用内置Shader。& So...问题来了...& 项目中自建的Shader文件可以设置AssetBundle名称,然后进行打包,而内置的Shader根本无法设置Assetbundle名称,也就是说一般的打包方法是无法将内置的Shader进行打包的,从而导致使用的内置Shader的材质球,从AssetBundle中加载出来后,会出现材质球丢失的情况。& 对应这个问题的解决方法,我简单研究了一下,打包前可以将Unity的内置Shader设置一下,让Unity自己能够识别到哪些内置Shader是需要被打包出来的。具体方法如下:& 1、依次点击菜单栏的 Edit -& Project Settings -& Graphics,然后在Inspector面板中会出现关于内置Shader的设置(“Built-in shader setting”)和Shader分离设置(“Shader stripping”)。& 2、其中上方的Built-in shader setting的选项就是关于内置Shader的设置,这里只说明关于打包的操作,其中有一个将Always Included Shaders的数组,将需要打包的内置Shader添加在这里即可。例如我要将名为Particles/Additive的内置Shader添加到里面,需要将数组的size增加1,然后在多出来的数组元素中选择Particles/Additive即可。&& 这时候再进行打包,就可以将内置Shader包含在打包文件中了。这应该也是Unity打包内置Shader的正确操作了。& 扩展:Shader分离设置(“Shader stripping”)里面主要是关于烘培的灯光贴图打包的设置,一般的操作是:"Lightmap modes"选择"Manual",然后点击下面出现的"From current scene"按钮即可,Unity会更具当前的烘培贴图来自动适配设置。& 如果有错误的地方,望大家指正。
本文已收录于以下专栏:
相关文章推荐
http://blog.csdn.net/aceyan0718/article/details/
shader打包AssetBundle总结
Graphics Settings
Settings here are mostly for customizing and optimizing graphics-related se...
每个Unity场景都对应有NavMesh和LightMap数据。当使用 SceneManager.LoadScene 的时候,会自动载入LightMap 和 NavMesh的数据。然后再对MeshRe...
无论从减少安装包大小还是迎合unity64位IL2CPP默认就会打开StrippingLevel功能,通过库剖离来减少DLL的空间大小。
那么问题是我们自定义库使用了一些type,例如xml,或...
shader打包AssetBundle总结
最近比较忙,好久没有更新博客了,新项目切换到unity5.x后使用了新的打包机制,在打包shader的时候遇到了一些问题,这里来记录一...
1、我们一般把资源和代码作为两个工程。资源工程导出assetbundle供代码工程使用。这么做主要是防止资源过多导致代码工程启动速度慢,影响开发效率。
2、尽量避免使用Resources文件夹。这个...
从Unity4.2开始,为了减少首包大小,不会默认将所有Shader引擎加到游戏程序中,据Unity技术支持人员所说,Unity会将Shader引擎打包到Assetbundle资源中,但是我测试发现不...
Unity的AssetBundle系统是对资源管理的一个扩展,动态更新,网页游戏,资源下载都是基于AssetBundle系统的。但是不得不说,这个系统非常恶心,坑很深。至于有多深,请看这篇文章: ht...
新东西固然是好事,但是没有相关文档的情况下还是搞得我一头雾水,研究了整整一天,才搞明白这次改版的情况
新的 BuildPipeline 弃用了以前的很多函数,新创建了一个方法:
又被Unity坑了一把,简单说下吧,下面都是流水账,结论就写在最后了,就是Unity5 - 5.2的shader编译机制真是不咋地。1.Why Always me?问题是这样的,我照着Unity5 的...
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)2011人阅读
unity_editor(5)
.cn/s/blog_89d90b7c0102w2ox.html
unity5已经封装好了接口,所以依赖打包并没有那么神秘和复杂了。
1.定义好资源的assetBundleName
2.BuildPipeline.BuildAssetBundles,指定资源目录和压缩类型
1.Assetbundle文件,加载时的首要文件,包含所有资源的依赖信息
2.每个文件对应一个.manifest,不用管他,但是可以打开查看他引用了哪些资源。
1.获取AssetBundle文件
2.LoadAsset(&AssetBundleManifest&)转换为AssetBundleManifest
3.通过manifest.GetAllDependencies(&测试文件&),获取它依赖的ab,得到的是AB数组,并下载它
4.最后下载名为(测试文件)的资源即可。
测试代码:
using UnityE &
using System.C &
public class LoadAssetbundle : MonoBehaviour { &
& & void Start() &
& & & & // 1.加载Manifest文件 &
& & & & AssetBundle manifestBundle=AssetBundle.CreateFromFile(Application.dataPath +&/ab/Assetbundle&); &
& & & & if(manifestBundle != null) &
& & & & { &
& & & & & & AssetBundleManifest manifest = (AssetBundleManifest)manifestBundle.LoadAsset(&AssetBundleManifest&); &
& & & & & & // 2.获取依赖文件列表 &
& & & & & & string[] cubedepends = manifest.GetAllDependencies(&assets/res/1.prefab&); &
& & & & & & AssetBundle[] dependsAssetbundle = new AssetBundle[cubedepends.Length]; &
& & & & & & for(int index = 0; index & cubedepends.L index++) &
& & & & & & { &
& & & & & & & & // 3.加载所有的依赖资源 &
& & & & & & & & dependsAssetbundle[index]=AssetBundle.CreateFromFile( &
& & & & & & & & & & Application.dataPath +&/../Assetbundle/&+cubedepends[index]); &
& & & & & & } &
& & & & & & // 4.加载资源 &
& & & & & & AssetBundle cubeBundle=AssetBundle.CreateFromFile( &
& & & & & & & & Application.dataPath +&/ab/assets/res/1.prefab& ); &
& & & & & & GameObject cube=cubeBundle.LoadAsset(&1&) as GameO &
& & & & & & if(cube!=null) &
& & & & & & { &
& & & & & & & & Instantiate(cube); &
& & & & & & } &
& & & & } &
如果材质球的名称和它引用的贴图名称一样,材质球内存占有量就会像包含了贴图的内存一样。
换版本tips:
4.6项目移植到5.0.2,ab包无法加载,重新打包即可。
不改打包代码,多数文件大小增大2k
改为最新打包代码,不做依赖,多数文件大小增大2-4%左右
如果做依赖,会生成很多零碎的文件,开发期不建议使用,以免增加不必要的工作量。和美术定义好资源规范才是重点。(个人意见,不喜随你便Unity学习(六)5.x依赖打包)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场1381人阅读
所有脚本代码来自官方
打包AssetBundle:
在Editor界面,点击prefab或文件,在AssetsBundle处设置此prefab的Assetsbundles属性。
点New可以创建AssetBundle名称,输入“/”可设置下一级名称。
多个物体可设为同一个AssetBundle名称。
添加一个脚本,给Editor增加一个打包的功能:
using UnityE
public class CreateAssetBundles
[MenuItem ("Assets/Build AssetBundles")]
static void BuildAllAssetBundles ()
BuildPipeline.BuildAssetBundles ("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.StandaloneOSXUniversal);
其中”AssetBundles”为需要手工添加的文件夹名称。
在顶部Assets目录中的底部会出现Build Assetbundles选项。点击后会开始build进程。
AssetBundles目录中会出现一个AssetBundles文件(作用未知)和一个AssetBundles.manifest文件,manifest文件里写明了各AssetBundles的关系。
如果之前设置的Assetbundle属性有多个层级,则AssetBundles文件夹中会出现相应的下一级文件夹,AssetBundle文件以及它对应的manifest文件。
加载AssetBundle:
有两种方式
1,下载但不储存到缓存中
using UnityE
using System.C class NonCachingLoadExample : MonoBehaviour {
public string BundleURL;
public string AssetN
IEnumerator Start() {
using (WWW www = new WWW(BundleURL)) {
yield return
if (www.error != null)
throw new Exception("WWW download had an error:" + www.error);
AssetBundle bundle = www.assetB
if (AssetName == "")
Instantiate(bundle.mainAsset);
Instantiate(bundle.LoadAsset(AssetName));
bundle.Unload(false);
2,下载并储存到缓存中(推荐)
using UnityE
using System.C
public class CachingLoadExample : MonoBehaviour {
public string BundleURL;
public string AssetN
public int
void Start() {
BundleURL="file://"+Application.dataPath+BundleURL;
StartCoroutine (DownloadAndCache());
IEnumerator DownloadAndCache (){
while (!Caching.ready)
yield return null;
using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){
yield return
if (www.error != null)
throw new Exception("WWW download had an error:" + www.error);
AssetBundle bundle = www.assetB
if (AssetName == "")
Instantiate(bundle.mainAsset);
foreach(UnityEngine.Object temp in bundle.LoadAllAssets())
Instantiate(temp);
bundle.Unload(false);
加载脚本中两个变量的说明:
-变量BundleURL的格式:
–如果为UnityEditor本地:
—“file://”+“application.datapath”+“/文件夹名称/文件名”
–如果为服务器:
—http://….
-变量AssetName:
–为prefab或文件的名字。
如果要同时实例化所有AssetBundle中的物体(如果都是prefab),可用LoadAllAssets()方法,例如:
foreach(UnityEngine.Object temp in bundle.LoadAllAssets())
Instantiate(temp)
这样,之前被打包进AssetBundle内的prefab就会出现在场景中了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28480次
排名:千里之外
原创:37篇
评论:11条
阅读:1749
(2)(2)(5)(2)(4)(1)(1)(2)(1)(1)(3)(3)(3)(2)(1)(4)(1)Unity3D 预设打包的注意事项
作者:佚名
字体:[ ] 来源:互联网 时间:10-20 15:04:17
这篇文章主要介绍了Unity3D 打包预设的时候应该注意哪些问题,非常的实用,是篇非常不错的文章,希望对大家能有所帮助
在平时的开发中,把预设打包成 assetbundle 文件是非常普遍的做法,但是我们不能随便把预设打包成 assetbundle 就算完事,我们应该先清楚把预设打包成 assetbundle 的目的,通常我们把预设打包成 assetbundle 文件是为了压缩预设的文件尺寸以方便从网络快速加载,既然这样,我们就应该知道打包预设的时候应该注意哪些问题。
我们先创建测试环境,场景中的 Stamp7 与 Stamp9 网格不同,但是材质相同,R1_Column1 与 Stamp7 以及 Stamp9 的网格、材质都不相同,场景如图:
接着我们把场景的子对象(场景中的 Stamp7、Stamp9、R1_Column1)先做成预设,如图:
然后我们分别把这三个文件打包成 assetbundle 文件,并观察生成 assetbundle 文件大小,如图:
从图中我们可以看出,因为 Stamp7、Stamp9 材质相同,他们生成出来的文件大小差不多大,但是他们是独自打包,所以材质也是独立的,因为材质无法共享。
下面我们把 Trees(包括 Stamp7 与 Stamp9)以及 Stones 也做成预设,如图:
然后我们再把 Trees 与 Stones 打包成 assetbundle 文件,如图:
从图中我们可以看出 Trees(包括 Stamp7 与 Stamp9 两个预设文件)的大小差不多是 Stamp7 与 Stamp9 大小的一半,这是因为 Stamp7 与 Stamp9 材质相同,在打包的时候,共享一份材质,所以材质只有一份。
下面我们给 Stamp7 附加 R1_Column1 的材质,如图:
然后我们再打包 Stamp7 文件,如图:
从下图中,我们可以看到 Stamp7_1 的文件大小比 R1_Column1 与 Stamp7 都要大,因为 Stamp7_1 包括了 R1_Column1 与 Stamp7 的材质。
然后我们再把 Trees 文件重新打包,从下图中我们依然能发现 Trees 文件也变大了,因为 Trees 文件也包括了 R1_Column1 的材质文件。
总结:到这儿我们可以对预设的注意事项有一些了解了,那就是尽量把材质相同的预设放在一起打包。
大家感兴趣的内容
12345678910
最近更新的内容}

我要回帖

更多关于 assetbundle打包工具 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信