Unity:如何根据玩家进度保存和加载场景

时间:2019-07-20 10:09:09

标签: c# unity3d

我正在尝试建立一款游戏,每位玩家完成一个关卡,就会加载下一个关卡。当玩家完成关卡时,如果他完成关卡1,则关卡2加载,依此类推。

我尝试使用变量来执行此操作。这样变量增加并且Unity加载与该变量相对应的场景(1 =级别1,2 =级别2,依此类推)。我遇到的问题是,我希望团结一致地记住所说的变量,以便当游戏第二次/第三次加载时,用户从第2级而不是第1级(或更高级别)开始

由于我正在尝试执行我不知道该怎么做的操作,因此我无法在此处提供代码

2 个答案:

答案 0 :(得分:2)

您可以使用PlayerPrefs存储级别值。

例如 加载场景后,您可以在Start()方法中获取级别值

void Start()
{
   //It will return level value, if player is playing game first time default value is return 0
   int level = PlayerPrefs.GetInt("Level", 0);
}

现在,当玩家完成当前级别时,您可以像这样增加级别并进行存储。

void LevelComplete()
{
  //It will return current level
  int currentLevel = PlayerPrefs.GetInt("Level", 0);
  // Now we increase one level and store new level
  currentLevel++;
  PlayerPrefs.SetInt("Level", currentLevel);
}

答案 1 :(得分:0)

您可以通过序列化将对象的状态保存到文件中。这是有关此内容的完整教程:https://learn.unity.com/tutorial/persistence-saving-and-loading-data

相关的代码段是这样的:

public class GameControl : MonoBehaviour
{
  public float health;
  public float experience;
  
  public void Save()
  {
    BinaryFormatter bf = new BinaryFormatter();
    FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat");
    
    PlayerData data = new PlayerData();
    data.health = health;
    data.experience = experience;
    
    bf.Serialize(file, data);
    file.Close();
  }
  
  public void Load()
  {
    if(File.Exists(Application.persistentDataPath + "/playerInfo.dat"))
    {
      BinaryFormatter bf = new BinaryFormatter();
      FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
      PlayerData data = (PlayerData)bf.Deserialize(file);
      file.Close();
      
      health = data.health;
      experience = data.experience;
    }
  }
}

[Serializable]
class PlayerData
{
  public float health;
  public float experience;
}