Unity C# 级别菜单,锁定/解锁级别的问题

问题描述

我的关卡菜单有这个 PlayerPrefsUpdate.cs:

using UnityEngine;

public class PlayerPrefsUpdate : MonoBehavIoUr {

   public int PlayerLevel = 0;

    private int LastLevel = -1;

    private void Start() {
        PlayerLevel = PlayerPrefs.GetInt("PlayerLevel");
    }

    private void Update() {
        if (LastLevel != PlayerLevel) {
            PlayerPrefs.SetInt("PlayerLevel",PlayerLevel);
            LastLevel = PlayerLevel;
        }
    }
}

例如,如果我玩 4 个级别,则解锁 5 个级别,一切都很好。

unlocked

但是如果我再次玩第 1 级,级别将再次锁定。我该怎么办?

locked

解决方法

与其检查您玩过的最后一个关卡是否不是 PlayerLevel,而是检查它是否更大。

        if (LastLevel > PlayerLevel) {
            PlayerPrefs.SetInt("PlayerLevel",PlayerLevel);
            LastLevel = PlayerLevel;
        }

您的命名有点混乱,所以可能是相反的。但是您想检查您刚刚玩的级别是否大于您迄今为止玩过的最大级别。此外,您真的不需要在 Update 函数中使用它,因为我预计在完成新关卡并返回菜单屏幕之前它不会改变。

如果问题是 PlayerPrefs 的 PlayerLevel 变量是您唯一保留的变量,您可能需要检查是否在更新时增加了它:

int progressedToLevel = PlayerPrefs.GetInt("PlayerLevel");
if (currentLevel > progressedToLevel) {
    PlayerPrefs.SetInt("PlayerLevel",currentLevel);
}
,

我在 GameManager.cs 中成功使用了这段代码:

public void CompleteLevel ()
 {
      int savedPlayerLevel = PlayerPrefs.GetInt("PlayerLevel");
      int newPlayerLevel = Mathf.Max(PlayerLevel,savedPlayerLevel);
      PlayerPrefs.SetInt("PlayerLevel",newPlayerLevel);
      completeLevelUI.SetActive(true);
  }