问题描述
我的关卡菜单有这个 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 个级别,一切都很好。
但是如果我再次玩第 1 级,级别将再次锁定。我该怎么办?
解决方法
与其检查您玩过的最后一个关卡是否不是 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);
}