【问题标题】:Unity 5 C# - How to Change Scenes and Import all Resources from Last SceneUnity 5 C# - 如何更改场景并从最后一个场景导入所有资源
【发布时间】:2019-02-01 13:30:08
【问题描述】:

我不知道如何切换场景并带上我所有的资源。我确实明白,在加载新场景时,前一个场景会在加载时被破坏。我已经使用 DontDestroyOnLoad() 进行了一些探索,但对我正在尝试做的事情没有运气。

我试图让我的玩家控制器成为一个预制件,然后简单地将他放到下一个场景中;但是,由于我有很多脚本,我返回了很多错误。主要是检查点,HP条,甚至武器之类的东西。

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

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这实际上帮助保存了我的程序!我不得不使用你的每一个建议,如此出色的团队合作!感谢您的宝贵时间!
    【解决方案2】:

    如果您需要从前一个场景中导入每个对象,那么创建一个新对象的意义何在?

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

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

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

    【讨论】:

    • 这实际上是修复我的程序的主要成分!我完全做错了!谢谢!
    【解决方案3】:

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

    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翻过来的

    【讨论】:

    • 每个人都给了我很好的回应,我能够根据你的每一条建议把一些东西放在一起!我谢谢大家!我的谷歌搜索技能一定是小菜一碟,因为我在发帖前搜索和阅读了几个小时,但没有发现任何有用的东西!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多