【问题标题】:Unity: How to save and load scenes according to player progressUnity:如何根据玩家进度保存和加载场景
【发布时间】:2019-07-21 09:59:46
【问题描述】:

我正在尝试设置一个游戏,每次玩家完成一个关卡时,都会加载下一个关卡。当玩家完成关卡时,如果他完成了第 1 关,则第 2 关加载等等。

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

这里没有代码可供我提供,因为我正在尝试一些我不知道该怎么做的事情

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以通过序列化将对象的状态保存到文件中。这是一个完整的教程: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;
    }

    【讨论】:

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

      【讨论】:

      • 您应该为此使用播放器偏好设置!阅读here部分Careful: Don’t Use PlayerPrefs For Important Stuff
      • 啊,我明白了。所以任何人都可以通过 playerprefs 来改变关卡。有什么好的选择吗?
      • 别无选择。您应该使用 playerprefs 来保存进度。有其他选择,但当玩家关闭游戏时,进度将丢失。
      • @DharmeshPrajapati 你是什么意思别无选择? Unity 为我们提供了非常有用的 Application.persistentDataPath 来满足这种用途。此目录应该用于存储游戏的重要保存数据,而不是 playerprefs。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多