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”共存。




















阅读全文
0 0
原创粉丝点击