unity学习日记:使用AssetBunndle对场景进行打包及下载与加载
来源:互联网 发布:y芸芸网络有公司 编辑:程序博客网 时间:2024/06/16 19:46
首先建立三个场景,now、1、2,其中now为空场景,1和2场景分别设置一些不同的模型用以区分。如图:
在Editor文件夹下建立脚本BuildSceneAssetBundle。
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;//必须引用UnityEditorpublic class BuildSceneAssetBundle : MonoBehaviour { [MenuItem("资源包/创建场景资源包")] static void buildMethod() { Caching.CleanCache();//清楚缓存 //将要打包的场景在Assets文件夹下的路径和其名称添加到字符串数组里,此处要加场景的扩展名(.unity)。 string[] SceneNames = { "Assets/Scene/1.unity", "Assets/Scene/2.unity" }; //打包场景使用BuildPipeline.BuildPlayer进行,第一个参数是存放要打包场景路径的字符串数组,第二个参数是打包以后存放资源包的路径及资源包名称,可不带扩展名,若带了扩展名,下载此包时也要带上扩展名才能正确下载到此包,第三个参数是目标平台,第四个参数是其它选项,在打包场景时此处必须选择BuildAdditionalStreamedScenes BuildPipeline.BuildPlayer(SceneNames, Application.dataPath+"/abFolder_Scene/SceneAbs.unity3d", BuildTarget.StandaloneWindows, BuildOptions.BuildAdditionalStreamedScenes); AssetDatabase.Refresh();//刷新Unity的界面,以确保资源包显示出来 }}找到菜单栏中的“创建场景资源包”选项,单击创建场景资源包。可以看到在输出路径上生成一个文件,即场景资源包。
场景资源包的下载及加载:
场景资源包的下载与普通的AssetBundle下载一样,都是使用WWW来完成的。但是场景资源包的加载则不同。
Application.LoadLevel(); 该接口可以通过名字或索引载入AssetBundle文件中包含的对应场景。当加载新场景时,所有之前加载的GameObject都被销毁。该接口已弃用,被SceneManager.LoadScene()代替了。
Application.LoadLevelAsync(); 该接口和Application.LoadLevel()作用相同,不同的是该接口是对场景进行异步加载,即加载时主线程可以继续执行。已弃用,被SceneManager.LoadSceneAsync()代替。
Application.LoadLevelAdditive(); 该接口不同于Application.LoadLevel()的是,加载场景不会销毁之前加载的GameObject。该接口已弃用,被SceneManager.LoadScene()(重载的函数,第二个参数决定了是否销毁之前加载的GameObject)代替了。
Application.LoadLevelAdditiveAsync(); 和Application.LoadLevelAdditive()不同的是,该接口是异步加载,即加载时主线程可以继续执行。已弃用,被SceneManager.LoadSceneAsync()(重载的函数,第二个参数决定了是否销毁之前加载的GameObject)代替。
(以上场景资源包加载所用接口相关内容来自:http://blog.csdn.net/u011976408/article/details/53433139)
建立下载及加载脚本如下:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;//加载场景资源时必须引用UnityEngine.SceneManagement才能正确加载public class DownloadSceneAssetBundles : MonoBehaviour {IEnumerator Start () { Caching.CleanCache();//清除缓存 //下载场景资源包,因创建此资源包时加了扩展名(.unity3d),故此处下载时同样必须有扩展名 WWW w0 = WWW.LoadFromCacheOrDownload("file://" + Application.dataPath + "/abFolder_Scene/SceneAbs.unity3d", 0); yield return w0;//等待下载完成 AssetBundle ab = w0.assetBundle;//加载场景资源包 SceneManager.LoadScene("1");//加载场景“1”,销毁已加载场景及GameObject SceneManager.LoadScene("2", LoadSceneMode.Additive);//加载场景“2”,不销毁已加载场景及GameObject }}将脚本挂载到当前场景(now)的MainCamera上,运行,会看到因为场景“1”的加载,“now”被销毁,而“2”场景在加载时选择不销毁已加载的场景,故最终场景“1”与“2”共存。
- unity学习日记:使用AssetBunndle对场景进行打包及下载与加载
- unity学习日记:AssetBundle工作流程之资源的打包与加载
- unity学习日记:AssetBundle工作流程之下载与加载资源
- Unity场景打包AssetBundle并加载
- unity学习笔记【场景加载】
- Unity3d 场景打包与加载
- Unity场景加载与进度条
- unity使用AssetBundle使用记录一(续)--场景打包成AssetBundle并加载
- Unity异步加载场景与加载进度条
- Unity(五) Unity3D使用Assetbundle打包加载(Prefab、场景)转载原博客
- unity场景加载,及协同程序
- Unity打包场景对包大小的影响
- Unity 多场景打包
- unity打包场景
- Unity资源打包及动态加载
- c# 使用Newtonsoft.Json 对数据进行打包与解析
- Unity学习日记-使用脚本进行音频资源的读取,Resources.LoadAll
- unity 场景加载
- Ubuntu下的Eclipse和JDK的安装
- Linux 目录处理命令
- C语言之指针数组和数组指针
- iOS 日常开发后我们可以补充这些知识
- 读取nutch爬取内容方法
- unity学习日记:使用AssetBunndle对场景进行打包及下载与加载
- 如何注册ocx文件(两种方法)
- Access restriction: The type BASE64Encoder is not accessible due to restriction on required library
- 分割回文串 II-LintCode
- RCNN学习笔记(7):Faster R-CNN 英文论文翻译笔记
- ajax各个事件执行顺序
- Spark-Streaming及其工作原理
- 服务之间的http调用越来越多,下面把使用http连接池的注意事项及运遇到的坑和大家分享一下
- SLAM之激光雷达Velodyne vlp-16使用