【问题标题】:Unity C# Levels menu, problem with locked/unlocked levelsUnity C# Levels 菜单,锁定/解锁级别的问题
【发布时间】:2021-04-02 18:31:37
【问题描述】:

我的关卡菜单中有这个 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 关,关卡会再次锁定。我该怎么办?

【问题讨论】:

    标签: c# unity3d menu game-development levels


    【解决方案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);
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多