簡體   English   中英

在 Unity 中保存和加載 object 的實例

[英]Saving and loading instances of an object in Unity

我正在嘗試在 Unity 中制作一個包含用戶界面的程序,我可以在其中創建具有多個統計數據(健康、法力和經驗)的團隊,並管理每個團隊的統計數據。 團隊管理本身似乎正在工作,但我正在努力創建一個保存系統。

通過實例化 class Team的預制 object 來創建新團隊,其中包含有關團隊如何工作的所有信息。 在朋友的幫助下,我進行了下一次保存 function,它將我想從 class 團隊的所有對象中保留的變量添加到我通過 Z466DEEC76ECDF5FCA6D38571F6324D54 保存在文件中的列表中:

public void Save()
    {
        List<Team> teams = getTeams();

        StreamWriter sw = new StreamWriter("save.json");
        sw.WriteLine(JsonConvert.SerializeObject(teams, new JsonSerializerSettings
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore
        }));
        sw.Close();
    }

我現在想加載 function 將程序設置為與關閉它之前相同的狀態,每個團隊具有相同的團隊和相同的值,但是當重新打開程序時,它僅從預制團隊開始,並且我不知道如何使用為列表中每個團隊保存的變量來創建具有與舊團隊相同值的新實例。

我希望解釋足以讓您理解,並提前感謝您。

保存團隊的統計數據,然后在加載實例時重新分配它們。


public class Team : MonoBehaviour {
    // ...
    public TeamStats Stats { get; private set; }

    public void Initalize(TeamStats stats) {
        Stats = stats;
        // Do something with the new stats...
    }
    // ...
}
// ...

[System.Serializable]
public class TeamStats {
    public string Name { get; set; }
    public int TheStats { get; set; }
    // ...
}

然后將TeamStats保存到 Json 文件中。

加載游戲后,從 Json 文件中獲取所有TeamStats ,然后遍歷列表,創建一個新的Team預制件並為其分配相應的TeamStat ,如下所示:

[SerializeField]
private Team teamPrefab;

public void Save() {
    // We save the team stats instead
    List<TeamStats> teamStats = GetTeamStats();

    StreamWriter sw = new StreamWriter("save.json");
    sw.WriteLine(JsonConvert.SerializeObject(teamStats, new JsonSerializerSettings {
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
    }));
    sw.Close();
}

public void Load() {
    // Some function to load team stats from JSON
    List<TeamStats> teamStats = LoadTeamStatsFromJson();

    foreach (var teamStat in teamStats) {
        // Create a new prefab and assign it with the respective stats.
        Team newTeam = Instantiate(teamPrefab);
        newTeam.Initalize(teamStat);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM