Unity关卡锁定系统异常:重玩低级关卡后高级关卡被锁求助
问题根因
你当前遇到的问题核心出在关卡进度保存逻辑的触发时机,你贴的关卡解锁判断代码本身逻辑没有问题:
- 你在进入旧关卡(比如第1关)时,关卡保存脚本错误地将
PlayerPrefs中存储的最高通关进度"level"覆盖成了当前正在玩的关卡编号,原本存储的最高进度10被改成了1,因此判断解锁时只有要求≤1的关卡(第1、2关)处于可交互状态。 - 验证方式:你可以在重玩第1关后,查看
PlayerPrefs中"level"的实际存储值,会发现它已经从10变为1。
修复方案
1. 修改关卡进度保存逻辑
你需要把「通关关卡后才更新最高进度」作为保存逻辑的核心规则,绝对不能进入关卡就更新进度,示例的保存逻辑参考:
// 放在关卡通关、玩家进入下一关之前的逻辑位置 public void OnLevelPassed(int finishedLevel) { int currentHighestLevel = PlayerPrefs.GetInt("level", 0); // 只有当通关的关卡比当前存储的最高进度更高时,才更新存储值 if (finishedLevel > currentHighestLevel) { PlayerPrefs.SetInt("level", finishedLevel); PlayerPrefs.Save(); } }
2. 给解锁判断代码加默认值容错
你原来的PlayerPrefs.GetInt没有加默认值,首次启动游戏时如果没有对应键值会返回0,虽然逻辑不会出错,但建议加上明确默认值增强可读性:
[SerializeField] int levelRequirement; public void Start() { // 第二个参数为默认值,代表用户首次进入游戏时的最高进度为0 int currentHighestLevel = PlayerPrefs.GetInt("level", 0); bool levelUnlocked = currentHighestLevel >= levelRequirement; GetComponent<Button>().interactable = levelUnlocked; }
3. 验证规则匹配
确认每个关卡按钮的levelRequirement参数配置和你的解锁规则匹配:比如第1关要求为0(默认解锁)、第2关要求为1(通关第1关解锁)、第N关要求为N-1(通关第N-1关解锁)即可。
内容的提问来源于stack exchange,提问作者newier
相关产品推荐
相关产品推荐

