Unity有个很好的功能,大致是很多专注于PC的engine没有提供的(因为没有必要),就是能加载主包外的资源,这个主包外的资源,unity把它叫做bundle。这个功能的提供,主要是在web上或者是ios、android等设备上,主包太大的话,会遇上下载主包时间太长,体验不佳;或者是有些市场直接就限制了主包的大小。
制作的bundle的方式,这里只讲bundle中连scene都带入的:
1、Assets/Editor下面放入编辑器使用的菜单代码,代码如下:
o<wbr><wbr><wbr><span></span>@MenuItem("Tools/Build<wbr>Streamed<wbr>Asset<wbr>Bundle")</wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>static<wbr>function<wbr>ExportResource<wbr>()<wbr>{</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>var<wbr>path<wbr>=<wbr>EditorUtility.SaveFilePanel<wbr>("Build<wbr>Bundle",<wbr>"",<wbr>"*",<wbr>"unity3d");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>if<wbr>(path.Length<wbr>!=<wbr>0)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>{</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>var<wbr>levels<wbr>:<wbr>String[]<wbr>=<wbr>["Assets/mybundlelevel.unity"];</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>BuildPipeline.BuildStreamedSceneAssetB<wbr>undle<wbr>(levels,<wbr>path,<wbr>BuildTarget.Android);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>}</wbr></wbr></wbr>
[javascript]<wbr>view plaincopy</wbr>
o<wbr><wbr><wbr><span></span>@MenuItem("Tools/Build<wbr>Streamed<wbr>Asset<wbr>Bundle")</wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>static<wbr>function<wbr>ExportResource<wbr>()<wbr>{</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>var<wbr>path<wbr>=<wbr>EditorUtility.SaveFilePanel<wbr>("Build<wbr>Bundle",<wbr>"",<wbr>"*",<wbr>"unity3d");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>if<wbr>(path.Length<wbr>!=<wbr>0)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>{</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>var<wbr>levels<wbr>:<wbr>String[]<wbr>=<wbr>["Assets/mybundlelevel.unity"];</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>BuildPipeline.BuildStreamedSceneAssetB<wbr>undle<wbr>(levels,<wbr>path,<wbr>BuildTarget.Android);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>}</wbr></wbr></wbr>
上面的代码的最后一行,最后一个参数,你可以用需要的平台填入。
2、上面的代码放入以后,在Unity的Tools目录下,可以找到“Build Streamed Asset Bundle”。点击这个菜单,就可以为mybundlelevel.unity这个scene生成相关的.unity3d文件,也就是我们需要的bundle文件。
这样制作bundle的过程就结束了。你可以在主包中删除这个关卡而节省主包的空间。注意的是,你可以删除这个关卡需要的所有的资源,只不过要注意不要删除脚本文件、shader文件,还有就是可能被其他关卡引用到的文件。
使用bundle的方式:
在你的程序中,用下面的代码读取和装载相关的bundle
o<wbr><wbr><wbr><span></span>WWW<wbr>download<wbr>=<wbr>WWW.LoadFromCacheOrDownload("file://"<wbr>+<wbr>dataPath<wbr>+<wbr>"mybundlelevel.unity3d",<wbr>1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>if<wbr>(download.error<wbr>!=<wbr>null)</wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>{</wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>Debug.LogError(download.error);</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>return<wbr>false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>}</wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>AssetBundle<wbr>bundle<wbr>=<wbr>download.assetBundle;</wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>WWW<wbr>download<wbr>=<wbr>WWW.LoadFromCacheOrDownload("file://"<wbr>+<wbr>dataPath<wbr>+<wbr>"mybundlelevel.unity3d",<wbr>1);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>if<wbr>(download.error<wbr>!=<wbr>null)</wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>{</wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>Debug.LogError(download.error);</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span><wbr><wbr><wbr><wbr>return<wbr>false;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>}</wbr></wbr></wbr>
o<wbr><wbr><wbr><span></span>AssetBundle<wbr>bundle<wbr>=<wbr>download.assetBundle;</wbr></wbr></wbr></wbr></wbr></wbr>
注意最后一句代码并非想象中的没有必要(特别是C和C++程序员看到这个语句可能是某个function的最后一句),Unity文档说提到,这样写过后,资源才会被真正load进来。
LoadFromCacheOrDownload()的第一个参数,是一个URI,用"file://"开头,说明是本地的文件。用"http://“开头,说明文件在网络上。
上面的代码正确无误的跑过后,你就可以当做原来的level已经在你的主包中了。现在就可以用Application.LoadLevel()来装载这个关卡。
上述方式笔者在Android平台上测试,完全没有任何问题。而且加载速度也很快,在Unity论坛上,有老外遇上加载的速度很慢,笔者没有遇到。
另,这个过程可能遇上让你抓头的问题:
Application.LoadLevel()时,Unity报错,大致是“xxx<wbr>couldn't be loaded because it<wbr>has not been added to the build settings”。这个问题的产生,你可以检查以下几个地方:</wbr></wbr>
1、生成bundle的时候,bundle生成没有错误;
2、bundle通过一定的方式放到了正确的路径;
3、LoadFromCacheOrDownload()的参数一,用了file://或者是http://开头;
4、可以更改LoadFromCacheOrDownload()的第二个参数试试;
不需要考虑的是,在bundle中的scene(level),是不需要在BuildSetting中勾上的,也没有办法勾,因为被你删除了,对吧!Unity的这个错误提示容易让人想入非非。
分享到:
相关推荐
vuforia-unity-6-0-112.unitypackage
HTC vive eye pro里面自带眼动追踪,这个是unity里使用的一个package,导入并让unity工程支持openvr,里面的例子就可以用了
vuforia-samples-advanced-android-ios-unity-4-2-3.zip官网下载太慢了,放在网盘方便大家下载
总结,"Newtonsoft.Json-for-Unity-master"为Unity开发者提供了一个强大的JSON处理工具,通过其丰富的特性和API,可以轻松处理JSON数据,提高开发效率和代码可维护性。在实际项目中,合理利用这些功能,可以更好地...
unity spain 3.8 2021-11-10
Vive-SRWorks-0.7.0.0-Unity-Plugin.unitypackage VIVE PRO 官方最新版AR sdk 需要和Vive-SRWorks-0.7.0.0-Unity-Experience.unitypackage 和steam vr plugin一起使用
Unity3d特效粒子宇宙星系特效--------Unity 5.3.2f1 (64-bit)运行----源代码 Unity3d特效粒子宇宙星系特效--------Unity 5.3.2f1 (64-bit)运行----源代码
而"Vive-SRanipal-Unity-Plugin.unitypackage"作为Unity的包文件,是专门为整合OpenVR和Vive Eye Pro的眼动追踪技术而设计的。这个包文件包含了所有必要的资源、脚本和设置,使得开发者无需从零开始构建相关系统,只...
为了速度慢下载失败或者无法下载的人提供,这是最新的vuforia unity sdk 6.2.10
总的来说,UMotion Pro是Unity开发者的一个强大助手,通过它的实时编辑和全面的动画工具,能够帮助开发者快速、精确地创建出高质量的3D动画,从而提升项目的整体品质和开发效率。对于那些致力于提升游戏或应用程序...
vuforia-unity-6-0-117.unitypackage 链接地址: https://developer.vuforia.com/downloads/sdk#downloadModal 有时候下载速度比较忙,所以上传一份
常常使用 Spine 来制作一些动画,这个插件是用来让unity可以播放spine制作的动画
vuforia-unity-6-2-10.unitypackage包含了Vuforia引擎的特定版本,针对Unity 6.2.10进行了优化,确保了与Unity的无缝集成和稳定运行。 1. Vuforia核心功能: - **目标检测与跟踪**:Vuforia能够识别和追踪图像目标...
Spine-Unity 3.7 runtime unitypackage,当前最新版本
《使用Unity和Blender进行游戏开发:模型资源与场景构建》 在当今的数字娱乐行业中,游戏开发是一项涉及多方面技能和技术的复杂任务。本文将深入探讨如何利用Unity引擎和Blender软件,来创建一款电视游戏。这两个...
Unity-UI-Extensions,总有一款效果是你想要的!
BestHTTP是一个用于Unity游戏开发的网络通信插件,它提供了一套简单易用的API,用于进行HTTP、WebSocket和...跨平台支持:BestHTTP适用于Unity游戏开发,并且支持多个平台,包括Windows、Mac、Linux、iOS和Android等。