首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你如何云保存每个级别的数据。像Candy crush游戏那样的unity游戏

你如何云保存每个级别的数据。像Candy crush游戏那样的unity游戏
EN

Stack Overflow用户
提问于 2019-01-14 16:06:20
回答 1查看 303关注 0票数 0

我正在为Android开发一个使用unity的益智游戏。所以我想在google play Cloud中保存每个级别的分数、时间和获得的星级。但是,如果我尝试将其保存为多个级别,则可以将其保存为一个级别。它会覆盖以前的数据。那么我该如何克服这个问题呢?

代码语言:javascript
复制
public class CloudSave : MonoBehaviour {
[SerializeField]
private Text message;
private int totalCoin = 20;
public int levelNumber;
public int starEarnedPerLevel;
#region Cloud_Save

private string GetSaveString() {
    string data = "";
    data += PlayerPrefs.GetInt("HighScore").ToString();
    data += "|";
    data += totalCoin.ToString();
    data += "|";
    data += levelNumber.ToString();
    data += "|";
    data += starEarnedPerLevel.ToString();
    return data;
}

private void LoadSaveString(string save) {
    string[] data = save.Split('|');
    PlayerPrefs.SetInt("HighScore", int.Parse(data[0]));
    totalCoin = int.Parse(data[1]);
    levelNumber = int.Parse(data[2]);
    starEarnedPerLevel = int.Parse(data[3]);
    Debug.Log("LoadSaveString Function");
}   

private bool isSaving = false;

public void OpenSave(bool saving) {
    Debug.Log("Open Save");
    if (Social.localUser.authenticated) {
        isSaving = saving;
        ((PlayGamesPlatform)Social.Active).SavedGame
            .OpenWithAutomaticConflictResolution(
            "MyCloudFile", 
            DataSource.ReadCacheOrNetwork, 
            ConflictResolutionStrategy.UseLongestPlaytime, SavedGameOpen);
    }
}

private void SavedGameOpen(SavedGameRequestStatus reqStatus, ISavedGameMetadata metadata) {
    Debug.Log("SavedGameOpen");

    if (reqStatus == SavedGameRequestStatus.Success) {
        if (isSaving)// Writting
        { 
            byte[] data = System.Text.ASCIIEncoding.ASCII.GetBytes(GetSaveString());
            SavedGameMetadataUpdate update = new SavedGameMetadataUpdate.Builder().WithUpdatedDescription("Saved At :" + System.DateTime.Now.ToString()).Build();
            ((PlayGamesPlatform)Social.Active).SavedGame.CommitUpdate(metadata, update, data, SaveUpdate);

        }
        else // Reading or Loading
        {
            ((PlayGamesPlatform)Social.Active).SavedGame.ReadBinaryData(metadata,SaveRead);
        }

    }


}
//success Save
private void SaveUpdate(SavedGameRequestStatus reqStatus, ISavedGameMetadata metadata) {
    Debug.Log(reqStatus);
    if (reqStatus == SavedGameRequestStatus.Success)
    {
        message.text = ("Data Saved successfully ");
    }
    else {
        message.text = ("Data Saved failed " + reqStatus.ToString());
    }
}
//Load
private void SaveRead(SavedGameRequestStatus reqStatus, byte[] data) {
    if (reqStatus == SavedGameRequestStatus.Success) {
        string savedData = System.Text.ASCIIEncoding.ASCII.GetString(data);
        message.text = ("Data read successfully " + savedData);
        LoadSaveString(savedData);
    }
    else
    {
        message.text = ("Data read Failed!" + reqStatus.ToString());
    }
}

#endregion

}
EN

回答 1

Stack Overflow用户

发布于 2019-01-14 18:16:55

使用JSON保存游戏数据,拆分字符串维护困难。

代码语言:javascript
复制
{
    "currentLevel":"3",
    "totalCoin":"20",
    "levelData":[
    {
        "levelNum":1,
        "starEarn":3,
        "highScore":123456
    },
    {
        "levelNum":2,
        "starEarn":1,
        "highScore":1234
    }
    ]
}

//GameData.cs
[System.Serializable]
public class GameData {

    public int currentLevel;
    public int totalCoin;
    private Dictionary<int, LevelData> levelDataList;
    public GameData(){
        //
        // constructor
        //
    }
    public string GetSaveString(){
        string res = JsonUtility.ToJson (this);
        res = res.Substring (0, res.Length - 1);
        res = res + ",\"levelData\":[";
        foreach (LevelData levelData in levelDataList.Values) {
                res = res + JsonUtility.ToJson (levelData);
                res = res + ",";
            }
        if(levelDataList.Count > 0)
                res = res.Substring (0, res.Length - 1);
                res = res + "]}";
        return res;
    }
}

//LevelData.cs
    [System.Serializable]
    public class LevelData {

    public int levelNum;
    public int starEarn;
    public int highScore;
    public LevelData(){
        //
        // constructor
        //
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54177683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档