1 回答

TA贡献1865条经验 获得超7个赞
我认为您的问题源于在离开您的 1 级场景之前没有更新您的“levelReached”玩家偏好值。
在您发布的 1 级脚本中:
public void BlockDestroyed()
{
breakableBlocks--;
if (breakableBlocks <= 0)
{
GetComponent<LevelSelector>().levelunlocked =
sceneloader.LoadWinScreen();
}
}
当您的 LoadWinScreen 函数返回 void 时,以下行应该会引发错误:
GetComponent<LevelSelector>().levelunlocked =
sceneloader.LoadWinScreen();
尝试将该部分代码更改为以下内容:
if (breakableBlocks <= 0)
{
PlayerPrefs.SetInt("levelReached", 2);
sceneloader.LoadWinScreen();
}
请注意,在上面的示例中,我假设您有一个单独的脚本运行每个级别的游戏逻辑,因为我没有使用变量来设置新的 PlayerPrefs“levelReached”值。我建议在每个场景中都有一个 GameManager 脚本并跟踪您当前所处的关卡,这将允许您执行以下操作:
if (breakableBlocks <= 0)
{
if(PlayerPrefs.GetInt("levelReached") < GameManager.currentLevel + 1)
PlayerPrefs.SetInt("levelReached", GameManager.currentLevel + 1);
sceneloader.LoadWinScreen();
}
这需要一些单独的逻辑来承载跨场景的游戏状态,并且有几种方法可以解决这个问题(参见下面的示例和相关的 stackoverflow 链接):
使用 Unity DontDestroyOnLoad 函数的单例设计模式
ScriptableObjects 在关卡开始存储和检索数据
PlayerPrefs 在关卡开始时存储和检索数据
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报