我正在尝试制作一款益智游戏,其中有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);
}
答案 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!
}
}