嗯,这应该比它简单得多!或者我被自己的无知蒙蔽了眼睛!
我想要的是获取最后一个可玩级别的字符串名称的一些方法。
澄清:
所有可播放级别都按顺序命名 - " Level_01"通过" Level_100"。
所有不可播放的场景都有一些名称,如"开始菜单"和" LevelCompleted"这些场景包含"主菜单"等按钮。和"重播最后一级"。
我没有使用UI系统,根本不希望这样做。相反,我已经用碰撞器设置了对象,并且正在使用我的游戏机制来充当"按钮"。例如,当玩家拍摄名为"重播最后一级" OnCollisionEnter2D应该加载最后一个级别。
每当玩家完成或丢失一个关卡时,他们就会被带到" LevelCompleted"并显示了一些游戏统计数据(分数,时间等)。他们有三种选择:"主菜单","重播最后一级"和"继续"。
我需要的只是一个字符串变量,它总是包含以前加载的PLAYABLE级别的名称(即名称如" Level_01"而不是"开始菜单")。
然后我将使用该字符串在适当的位置输入我的GameManager脚本。播放的最后一个级别将在"重播最后一级"是由玩家拍摄的。当玩家射击"继续"我想玩下一个可玩的关卡。
非常简单的概念:我刚刚失去了" Level_02"。我现在在" LevelCompleted"。我拍摄"重播最后一级"。我输入" Level_02"再次。相反,如果我拍摄"继续"它带我到下一个可玩的级别,在这种情况下," Level_03"如果该级别已解锁。如果它尚未解锁,那么"继续"按钮会将我带回" level_02"。
顺便说一句,我在一个空的游戏对象上有一个GameManager脚本。这是一个坚持每个场景的单身人士。在这个脚本中有两个类 - 一个是作为单例的主要公共类,并且在大型数组中处理大量数据 - 另一个是可序列化的公共类GameData"。它只包含写入文件的变量,然后在游戏过程中根据需要重新加载。
答案 0 :(得分:1)
通常情况下,答案比我想象的简单得多!
在我的Gamemanager脚本中,我设置了一个公共静态字符串变量" currentLevel"。
然后在Awake()上我这样做了:
Scene scene = SceneManager.GetActiveScene();
if (scene.name != "LevelCompleted")
{
currentLevel = scene.name;
}
我意识到我的" LevelCompleted"场景永远不会被另一个"不可玩的"场景如"开始菜单"并且它只会被像#Level; Level_xx"这样的可玩级别打开。通过使用条件,它确保当那个场景" LevelCompleted"打开时,单例GameManager不会更新变量,这样变量将始终包含上次播放的可播放级别。
在场景" LevelCompleted"中,在按钮"重播最后一级",我有:
private string lastLevelPlayed;
void OnCollisionEnter2D(Collision2D collision)
{
lastLevelPlayed = GameManager.currentLevel;
SceneManager.GetSceneByName(lastLevelPlayed);
}