【问题标题】:How to load the right scene如何加载正确的场景
【发布时间】:2018-12-05 11:52:01
【问题描述】:

嘿,我正在为我的游戏制作游戏结束画面。我希望它获得游戏结束屏幕,然后当玩家死亡时它会重新启动该级别。我以一种低效的方式制作了多个游戏结束屏幕,然后将每个游戏结束连接到他们的场景,这样它就可以重新启动那个场景。我的问题是它仍然进入我的主要级别并跳过教程。代码:

    if (health == 0)
    {

        if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Level 2 - Damages"))

            SceneManager.LoadScene("Gameover 1");

        if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Level 3 - Wall Climbing"))

            SceneManager.LoadScene("Gameover 2");

        if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Level 4 - FallingPlatform"))

            SceneManager.LoadScene("Gameover 3");

        if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Level 5 - Buttons And Switches"))

            SceneManager.LoadScene("Gameover 4");

        if (SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Final Level"))

            SceneManager.LoadScene("Gameover");


    }

【问题讨论】:

  • 如果我理解,您可能只想存储玩家死亡的场景,例如在 PlayerPrefs 中,然后从游戏结束场景中的任何机制查找它以重新启动。
  • 为什么不将当前场景存储到某个地方的静态 int 或字符串中,然后当您遇到游戏结束场景时,只需重新加载存储的值?你也可以使用 PlayerPrefs 来做到这一点。

标签: c# unity3d scene-manager


【解决方案1】:

我真的不明白你的游戏结束场景和你的主要/教程场景之间的关联是什么,但是..

在构建设置中,您可以从文件菜单重新排列场景。确保启动/教程/您想要开始的任何场景都位于列表顶部。

更新;附言。切换可能也更容易 类似于:

 if (health == 0)
    {
      switch(SceneManager.GetActiveScene()){
       case SceneManager.GetSceneByName("Level 2 - Damages"):
            SceneManager.LoadScene("Gameover 1");
            break;
       case default: 
             SceneManager.LoadScene("MainMenu");
        }
    } 

【讨论】:

  • 我的教程是玩家经历的场景,所以如果玩家在教程中死亡,我的错误是无论是第一个教程,它都会进入游戏结束然后进入最终关卡
  • 生命值为0时在哪里查看是否是教程。如果结束场景但不加载新场景,不应该导致游戏按场景顺序跳转到下一个场景?也许添加一个 if 你可以检查它是否教程。 PS。使用开关可能更容易。
  • 将其添加到我的答案中。
  • 我通过在每个教程之后设置游戏结束场景然后在玩家死亡时 +1 和按下重新启动时 -1 来修复它。之后,如果玩家通过我只需 +2
猜你喜欢
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
相关资源
最近更新 更多