我在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
答案 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);
}
}
这可能适合你。