在AssetBundle和Unload中加载场景

时间:2015-04-17 10:56:41

标签: unity3d

我在AssetBundle中加载一个场景,如下所示:

IEnumerator AsyncLoad ()
{
    using (var www = new WWW("file://" + Application.dataPath + "/AssetBundles/scenes"))
    {
        yield return www;

        var bundle = www.assetBundle;

        Application.LoadLevel("Scene1");

        bundle.Unload(false);
    }
}

问题有时Application.LoadLevel("Scene1");正常工作,有时候Scene1为空。这有什么不对?

旁注:我注意到LoadLevel在加载之前会破坏当前场景,因此LoadLevel之后的行没有被执行(因为脚本被破坏了)。因为我需要卸载资产包以便再次使用它,有什么解决方案?

Unity 5

2 个答案:

答案 0 :(得分:0)

你想在附加了这个加载脚本的对象上使用dontdestroyonload http://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

答案 1 :(得分:0)

Application.LoadLevel将推迟下一帧加载sceneobjects,因此你需要推迟卸载AssetBundles。

IEnumerator AsyncLoad (){
using (var www = new WWW("file://" + Application.dataPath + "/AssetBundles/scenes")){
        yield return www;
        var bundle = www.assetBundle;
        Application.LoadLevel("Scene1");
        yield return null; // THIS LINE IS ADDED
        bundle.Unload(false);
    }
}

这可能适合你。