如何保存数据并在以后使用?

时间:2016-03-11 20:38:27

标签: c# arrays list unity3d

我是C#和Unity初学者,我正在编写太空射击游戏。我想创建一个包含敌方数据(EnemyID, EnemyHealth, EnemyType)的表格。我应该使用数组,列表还是字典?

实施例:

|EnemyID|EnemyHealth|EnemyType
|001    |50         |enemy1
|005    |100        |enemy2
...

但如何保存呢?必须可以添加或删除Enemy并更改其健康状况......我是否需要数组,列表或字典?

3 个答案:

答案 0 :(得分:3)

怎么样:

class Program
{
    static void Main(string[] args)
    {
        var enemyDatas = new List<EnemyData>
        {
            new EnemyData
            {
                EnemyName = "Name1",
                EnemyHealth = 50,
                EnemyId = 1,
                EnemyType = EnemyType.Bad
            },
            new EnemyData
            {
                EnemyName = "Name2",
                EnemyHealth = 100,
                EnemyId = 2,
                EnemyType = EnemyType.VeryBad
            }
        };
    }
}

public class EnemyData
{
    public int EnemyId { get; set; }
    public int EnemyHealth { get; set; }
    public EnemyType EnemyType { get; set; }
    public string EnemyName { get; set; }
}

public enum EnemyType
{
    Bad,
    VeryBad
}

答案 1 :(得分:1)

为此使用DataTable。 e.g。

name

答案 2 :(得分:1)

http://wiki.unity3d.com/index.php/Choosing_the_right_collection_type

数组如果您需要定义的集合并且以后不会更改它。你有5个玩家,不会有6个玩家,使用阵列。

对于你的敌人,我猜你计划添加和删除,使用列表。

你的每个敌人都是一个独特的敌人,例如某种类型的老板,使用字典,这样你就可以找到一个特定的敌人而无需迭代。

如果您希望保存这些数据,最好使用JsonUtility并保存文本文件

[Serializable]
public class Root{
    public Enemy[] enemies;
    public Root(Enemy[] enemies){
       this.enemies = enemies;
    }
}
[System.Serializable]
public class Enemy
{
   public int EnemyID; 
   public int EnemyHealth; 
   public EnemyType enemyType;
}
public enum EnemyType{ None, Soldiers, Boss }

然后你保存:

static void SaveEnemies(Enemies [] enemies, string path){
    Root root = new Root(enemies);
    string json = JsonUtility.ToJson(root);
    File. WriteAllText(path, root);
}

Unity json序列化程序不支持将集合作为顶级对象,因此您需要像我一样将其包装在根对象中。

然后你可以下次检索:

Enemy[] GetEnemies(string path){
    string json = File.ReadAllText(path);
    Root root = JsonUtility<Root>(json);
    return root.enemies;
}