Unityios开发--Unity bundle的制作和使用

news/2024/12/29 1:01:29/

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);

       }

   }

[javascript] view plaincopy

   @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;

注意最后一句代码并非想象中的没有必要(特别是C和C++程序员看到这个语句可能是某个function的最后一句),Unity文档说提到,这样写过后,资源才会被真正load进来。

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的这个错误提示容易让人想入非非。


http://www.ppmy.cn/news/638824.html

相关文章

利用南十字星座测量经纬度的方法

利用南十字星座测量经纬度的方法 一.球面三角形测量经纬度 下面资料下载网址是链接:https://pan.baidu.com/s/1tWVARhPsjVS9oAna_Gimmw?pwdrzsd 提取码:rzsd 「测量经纬度」https://www.aliyundrive.com/s/3iizCT5Zu2Q https://115.com/s/swn97oz36zv?passwordo074# 无线电测…

由粒子加速器产生的反中子形成的白洞

由粒子加速器产生的反中子形成的白洞 利用加速的反质子和质子的碰撞,产生的反中子,产生暗能量场来开启一个白洞。这个白洞可以和宇宙其它地方的黑洞之间形成一个虫洞,可以通过白洞和黑洞之间的虫洞到达宇宙的另外一端,白洞是由于物…

研发管理02----嵌入式硬件设计流程之完善

目录 一、确定功能需求&设计标准 1.1 确定功能需求 1.2 设计标准 二、方案设计 2.1 方案查找 2.1.1 小家电低配类芯片方案 2.1.2 物联网网络类芯片方案 2.1.4 工业类、汽车电子类芯片方案 2.1.5 PC、电脑类工控机方案 2.1.6 传感器&外设 2.1.7 屏幕相关 2.1…

嵌入式相关开源项目、库、资料------持续更新中

学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言、单片机、开源项目、物联网、操作系统、Linux、计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资料库。有好的嵌入式相关…

手机游戏开发中如何选择适合的纹理格式

手机游戏开发中如何选择适合的纹理格式 为毛要写这个 本来觉得像这样的问题,是无法归类的,因为不同的项目有不同的需求,但今天因为quick论坛中的一个技术疑问贴,钩起了我整理这篇文章的兴趣 http://www.cocoachina.com/bbs/read.…

【游戏提取/超详细记录向】关于unity游戏的资源提取所需资源及方法简介(AssetBundle及libil2cpp.so等解密)

方法一:AssetStudio提取(仅针对ab包及.assets、.boundle和.unity3d未加密的情况下) 1.在我们拿到一个游戏的安装包时,首先会疑惑如何打开。下载bandzipBandizip Free zip, 7z, unzip, unrar Archiver Fast and easy&#xff0c…

http 分析

1、HTTP协议简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件…

【转载】Unity 项目管理与优化

转载自Unity官方论坛:Unity 项目设计与管理 不论是对于Unity初学者还是极有经验的开发者来说,项目设计与管理都是迟早需要接触并掌握的知识点。本文将由Unity技术支持工程师田彪,为大家详细全面地介绍Unity项目设计与管理的系统知识。全文分为…