Unity 5 C#-如何更改场景并从上一场景导入所有资源

时间:2018-09-11 23:27:09

标签: c# unity3d

我不确定如何切换场景并带走所有资源。我确实知道在加载新场景时,先前的场景在加载时会被破坏。我已经用DontDestroyOnLoad()探索了一些东西,但是对我想做的事却不走运。

我试图使我的播放器控制器成为预制件,然后将其放到下一个场景中;但是,由于有许多脚本,我返回了很多错误提示。主要是检查站,HP栏甚至武器之类的东西。

我需要知道的是如何将所有内容导入下一个场景。如何做到这一点而无需重新编码甚至重新制作我需要的所有东西?

3 个答案:

答案 0 :(得分:2)

如果您需要从上一个场景导入每个对象,那么创建一个新对象有什么意义呢?

您可以做的是将对象位置保存到文件中,然后将该文件重新加载到下一个场景中,或者再次尝试使用DontDestroyOnLoad();

我建议查看有关this function的Unity文档。

如果您希望在场景变化时不破坏单个对象,则在Unity的void Awake()函数上创建DontDestroyOnLoad(this.gameObject);

答案 1 :(得分:2)

您正在寻找LoadSceneMode.Additive。这是LoadScene方法的第二个参数,会将新场景加载到当前场景中。

答案 2 :(得分:1)

您能否提供更多信息?我问是因为从您的描述看来

  

DontDestoryOnLoad

应该完成您想要的,但是您说没有。只要使用该方法将包含要保存状态的组件的对象持久保存到下一场景,那么所有这些组件的状态也应持久保存。请详细说明,我们可能会提供更好的答案。至于如何使用它来保存每个游戏对象的状态:

GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>();
foreach(GameObject go in allObjects) {
   if (go.activeInHierarchy) { /* and any other logic you want. Maybe like !isTerrain */
      Object.DontDestroyOnLoad(go);
   }
}

对于上面的代码,我从https://answers.unity.com/questions/329395/how-to-get-all-gameobjects-in-scene.html撕掉了