如何计算Unity3D中PlayerPrefs键的数量?

时间:2017-02-19 13:26:09

标签: c# unity3d

我正在尝试制作一款益智游戏,其中有3种游戏模式(正常模式,定时器模式,分接模式)和50种等级。所有50种等级对于所有3种模式都是相同的,但在定时器定时器模式中有倒数计时器,而在轻敲模式中有定时器和分接头。在正常模式下没有限制。

现在我根据PlayerPrefs中的模式保存每个级别。

我根本没有锁定电平,但定时器模式和分接模式被锁定。只有正常模式解锁。

现在这就是我想要的。要解锁定时器模式,请首先播放任何10个正常模式等级,然后解锁敲击模式,首先播放任何10个定时器模式等级。

如何跟踪完成的级别。

以下是代码,这是我在完成后保存每个级别的方法

if (isNormalMode) {
    PlayerPrefs.SetString ("norm"+levelStr, levelStr);
    } 

if (isTimerMode) {
    PlayerPrefs.SetString ("timer"+levelStr, levelStr);
    }

if (isTapsMode) {
    PlayerPrefs.SetString ("taps"+levelStr, levelStr);
    }

1 个答案:

答案 0 :(得分:0)

您必须在类中表示级别和级别信息,然后将另一个类数组放在该类中。您可以使用该类数组来确定索引0 级别1 索引1 级别2 的级别

[System.Serializable]
 public class Levels
 {
     public LevelInfo[] levelInfo;
 }

 [System.Serializable]
 public class LevelInfo
 {
     public bool isCompleted;
     public string levelName;
     public int levelScore;

     //Other Level Information here
 }

this帖子中抓取DataSaver助手类。

然后您可以创建级别(例如5级)

Levels levels = new Levels();
levels.levelInfo = new LevelInfo[5];

for (int i = 0; i < levels.levelInfo.Length; i++)
{
    levels.levelInfo[i] = new LevelInfo();
    levels.levelInfo[i].levelName = i + 1.ToString();
    levels.levelInfo[i].levelScore = UnityEngine.Random.Range(10, 100);
    levels.levelInfo[i].isCompleted = true;
}

保存级别:

DataSaver.saveData(levels, "Levels");

加载级别

加载并检查水平是否完成:

//Load Saved Data
Levels levels = DataSaver.loadData<Levels>("Levels");

检查等级1是否完成。

if (levels.levelInfo[0].isCompleted)
{
    //Level 1 Completed
}

检查第2级是否完成。

if (levels.levelInfo[1].isCompleted)
{
    //Level 2 Completed
}

...

如果设置正确,读取级别的正确方法是使用循环找出尚未完成的级别,然后从那里开始。

Levels levels = DataSaver.loadData<Levels>("Levels");
for (int i = 0; i < levels.levelInfo.Length; i++)
{
    if (!levels.levelInfo[i].isCompleted)
    {
        Debug.LogFormat("Level ({0}) is not completed", i + 1);
        //Level not completed. Start from here!
    }
}