【问题标题】:Unity 5.5.1 - get last level loaded?Unity 5.5.1 - 加载最后一个级别?
【发布时间】:2017-03-05 03:20:38
【问题描述】:

嗯,这应该比现在简单得多!或者我被自己的无知蒙蔽了双眼!

我想要的是获取最后一个可播放关卡的字符串名称的方法。

澄清一下:

所有可玩关卡都有顺序名称 - “Level_01”到“Level_100”。

所有不可播放的场景都有名称,例如“开始菜单”和“关卡完成”,这些场景包含“主菜单”和“重播上一关”等按钮。

我没有使用 UI 系统,也根本不想这样做。相反,我设置了带有碰撞器的对象,并使用我的游戏机制充当“按钮”。例如,当玩家按下名为“Replay Last Level”的按钮时,OnCollisionEnter2D 应该加载最后播放的关卡。

每当玩家完成或丢失一个关卡时,他们都会被带到“LevelCompleted”并显示一些游戏统计数据(分数、时间等)。他们有三个选择:“主菜单”、“重播上一关”和“继续”。

我需要的只是一个字符串变量,它始终包含先前加载的 PLAYABLE 关卡的名称(即名称像“Level_01”而不像“开始菜单”的那些。)

然后我将使用该字符串在适当的位置输入我的 GameManager 脚本。当玩家射击“重播上一关”时,将加载上一关。当玩家射击“继续”时,我想玩下一个可玩的关卡。

非常简单的概念:我刚刚丢失了“Level_02”。我现在处于“LevelCompleted”中。我拍摄“重播最后一关”。我再次输入“Level_02”。相反,如果我射击“继续”,它会将我带到下一个可玩关卡,在这种情况下,如果该关卡已解锁,则为“Level_03”。如果尚未解锁,则“继续”按钮将带我回到“level_02”。

顺便说一句,我在一个空游戏对象上有一个 GameManager 脚本。它是一个坚持到每个场景的单例。在这个脚本中有两个类——一个是主要的公共类,它是单例,用更大的数组中的数据做一大堆东西——另一个只是一个可序列化的“公共类 GameData”。它仅包含写入文件并在游戏过程中根据需要重新加载的变量。

【问题讨论】:

    标签: unity5


    【解决方案1】:

    通常情况下,答案比我想象的要简单!

    在我的 Gamemanager 脚本中,我设置了一个公共静态字符串变量“currentLevel”。

    然后在 Awake() 上我这样做了:

        Scene scene = SceneManager.GetActiveScene();
        if (scene.name != "LevelCompleted")
        {
            currentLevel = scene.name;
        }
    

    我意识到我的“LevelCompleted”场景永远不会被“开始菜单”这样的“不可玩”场景打开,并且只能被“Level_xx”这样的可玩关卡打开。通过使用条件,它确保当场景“LevelCompleted”打开时,变量不会被单例 GameManager 更新,因此变量将始终包含最后播放的可玩关卡。

    在“LevelCompleted”场景中,在“Replay Last Level”按钮中,我有:

    private string lastLevelPlayed;
    
    void OnCollisionEnter2D(Collision2D collision)
    {
        lastLevelPlayed = GameManager.currentLevel;
        SceneManager.GetSceneByName(lastLevelPlayed);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多