Unity bundle的制作和使用
原地址:http://unity3d.9ria.com/?p=2863
Unity有个很好的功能,大致是很多专注于PC的engine没有提供的(因为没有必要),就是能加载主包外的资源,这个主包外的资源,unity把它叫做bundle。这个功能的提供,主要是在web上或者是ios、android等设备上,主包太大的话,会遇上下载主包时间太长,体验不佳;或者是有些市场直接就限制了主包的大小。
制作的bundle的方式,这里只讲bundle中连scene都带入的:
1、Assets/Editor下面放入编辑器使用的菜单代码,代码如下:
- @MenuItem("Tools/Build Streamed Asset Bundle")
- static function ExportResource () {
- var path = EditorUtility.SaveFilePanel ("Build Bundle", "", "*", "unity3d");
- if (path.Length != 0)
- {
- var levels : String[] = ["Assets/mybundlelevel.unity"];
- BuildPipeline.BuildStreamedSceneAssetBundle (levels, path, BuildTarget.Android);
- }
- }
- @MenuItem("Tools/Build Streamed Asset Bundle")
- static function ExportResource () {
- var path = EditorUtility.SaveFilePanel ("Build Bundle", "", "*", "unity3d");
- if (path.Length != 0)
- {
- var levels : String[] = ["Assets/mybundlelevel.unity"];
- BuildPipeline.BuildStreamedSceneAssetBundle (levels, path, BuildTarget.Android);
- }
- }
2、上面的代码放入以后,在Unity的Tools目录下,可以找到“Build Streamed Asset Bundle”。点击这个菜单,就可以为mybundlelevel.unity这个scene生成相关的.unity3d文件,也就是我们需要的bundle文件。
这样制作bundle的过程就结束了。你可以在主包中删除这个关卡而节省主包的空间。注意的是,你可以删除这个关卡需要的所有的资源,只不过要注意不要删除脚本文件、shader文件,还有就是可能被其他关卡引用到的文件。
使用bundle的方式:
在你的程序中,用下面的代码读取和装载相关的bundle
- WWW download = WWW.LoadFromCacheOrDownload("file://" + dataPath + "mybundlelevel.unity3d", 1);
- if (download.error != null)
- {
- Debug.LogError(download.error);
- return false;
- }
- AssetBundle bundle = download.assetBundle;
- WWW download = WWW.LoadFromCacheOrDownload("file://" + dataPath + "mybundlelevel.unity3d", 1);
- if (download.error != null)
- {
- Debug.LogError(download.error);
- return false;
- }
- AssetBundle bundle = download.assetBundle;
LoadFromCacheOrDownload()的第一个参数,是一个URI,用"file://"开头,说明是本地的文件。用"http://“开头,说明文件在网络上。
上面的代码正确无误的跑过后,你就可以当做原来的level已经在你的主包中了。现在就可以用Application.LoadLevel()来装载这个关卡。
上述方式笔者在Android平台上测试,完全没有任何问题。而且加载速度也很快,在Unity论坛上,有老外遇上加载的速度很慢,笔者没有遇到。
另,这个过程可能遇上让你抓头的问题:
Application.LoadLevel()时,Unity报错,大致是“xxx couldn't be loaded because it has not been added to the build settings”。这个问题的产生,你可以检查以下几个地方:
1、生成bundle的时候,bundle生成没有错误;
2、bundle通过一定的方式放到了正确的路径;
3、LoadFromCacheOrDownload()的参数一,用了file://或者是http://开头;
4、可以更改LoadFromCacheOrDownload()的第二个参数试试;
不需要考虑的是,在bundle中的scene(level),是不需要在BuildSetting中勾上的,也没有办法勾,因为被你删除了,对吧!Unity的这个错误提示容易让人想入非非。
Unity bundle的制作和使用的更多相关文章
- Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果
Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果 梗概: 一. 摄像机围绕目标物体旋转, 即摄像机离目标物体有一定的距离且旋转轴心为该物体的位置. 二. 当目标物体被障碍物挡住后, 需要将摄像机 ...
- Unity引擎入门——制作第一个2D游戏(1)
Unity作为当今最流行的游戏引擎之一,受到各大厂商的喜爱. 像是炉石传说,以及最近的逃离塔克夫,都是由unity引擎开发制作. 作为初学者的我们,虽然无法直接做出完成度那么高的作品,但每一个伟大的目 ...
- 在Unity中用UGUI制作可输入下拉框
Unity中UGUI制作可输入下拉框 目录 Unity中UGUI制作可输入下拉框 前言 组件分析 制作流程 总结 前言 在搜索引擎以及一些网页中我们常常可以看见这样一种UI控件,看上去是一个输入框,在 ...
- Unity小游戏制作 - 暗影随行
用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...
- Unity 使用BMFont制作字体
参考链接:http://blog.csdn.net/huang9012/article/details/32333913,作者:CSDN huang9012 NGUI版本:3.6.5 要自己制作字体, ...
- Unity KGFMapSystem插件制作小地图
KGFMapSystem版本:2.3 在我们开发游戏或者虚拟现实中,一般都会用到小地图,如果要我们去写小地图,可以用到unity 3d中就有一个插件,是专门开发小地图用的,这个插件就是KGFMapSy ...
- Unity 阴影的制作方式
Unity阴影制作的三种方式. 方式一:Light中Shadow Type的类型 包括Hard Shadows.Soft Shadows.No Shadows: Mesh Renderer中的属性 ...
- unity 中UGUI制作滚动条视图效果(按钮)
1.在unity中创建一个Image作为滚动条视图的背景: 2.在Image下创建一个空物体,在空物体下创建unity自带的Scroll View组件: 3.对滑动条视图的子物体进行调整: 4.添加滚 ...
- Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面
ToLua制作登录界面 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 请支持大神开发者:骏擎CP,蒙哥等奔 ...
随机推荐
- 010-python基础-数据类型-字符串操作
1.移除空白 username.strip() 2.分割 names = "alex,jack,rain" names_1 = names.split(",") ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- 配置php5.6的运行环境
所需要的原材料:(提供链接) php-5.6.10-Win32-VC11-x86 (zip)(注意php版本分为了IIS版和Apache版) httpd-2.4.12-x86-r2(apache) ( ...
- 为了android sdk下载,必须修改hosts
#Download 下载 203.208.46.146 dl.google.com 203.208.46.146 dl-ssl.google.com #Groups 203.208.46.146 gr ...
- hdu 4255 A Famous Grid
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4255 A Famous Grid Description Mr. B has recently dis ...
- 1 通过JNI混合使用Java和C++ -----> 操作字符串
JNI(Java Native Interface)是Java语言的一部分,可以访问非Java语言编写的程序,也可以用于在C++程序中执行Java代码. 步骤: 1> 编写带有native声明 ...
- [小技巧]让C#的空值处理变得更优雅
参考 http://www.codeproject.com/Articles/739772/Dynamically-Check-Nested-Values-for-IsNull-Values?msg= ...
- [原]Java修炼 之 基础篇(一)Java语言特性
学习软件开发,首先要选择的就是选择需要采用的编程语言,考虑语言本身的优缺点和实际需求,综合评价之后选择相关的语言进行系统开发.本篇博客开始就从近年来比较流行的Java开始为大家讲起. 背景 1995年 ...
- ABAP后台JOB数量控制
数据库视图:V_OP 可以查看JOB信息 FORM sub_check_job. * 通过JOB名称,控制活动JOB的数量 , jobname TYPE btcjob , strtdate TYPE ...
- 联想电脑win7旗舰版环境下的如何成功配置AppServ
联想电脑win7旗舰版环境下的如何成功配置AppServ 毕业设计中需要用Mysql数据库,并且想找一个方便Mysql数据库编程的开发工具,百度搜索了一下,AppServ集成环境安装包能快速搭建环境. ...