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

C# 如何保存数据并在以后使用?,c#,arrays,list,unity3d,C#,Arrays,List,Unity3d,我是C#和Unity初学者,正在编写一个太空射击游戏。我想创建一个包含敌人数据的表(EnemyID、EnemyHealth、EnemyType)。我应该使用数组、列表还是字典? 示例: |EnemyID|EnemyHealth|EnemyType |001 |50 |enemy1 |005 |100 |enemy2 ... 但如何拯救这一切呢?必须能够添加或移除敌人并改变其生命值。。。我需要数组、列表还是字典?为此使用数据表。 e、 g 为此使用数据表

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

示例:

|EnemyID|EnemyHealth|EnemyType
|001    |50         |enemy1
|005    |100        |enemy2
...
但如何拯救这一切呢?必须能够添加或移除敌人并改变其生命值。。。我需要数组、列表还是字典?

为此使用数据表。 e、 g

为此使用数据表。 e、 g

那么:

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
}
类程序
{
静态void Main(字符串[]参数)
{
var enemyDatas=新列表
{
新EnemyData
{
EnemyName=“Name1”,
EnemyHealth=50,
EnemyId=1,
EnemyType=EnemyType.错误
},
新EnemyData
{
EnemyName=“Name2”,
EnemyHealth=100,
EnemyId=2,
EnemyType=EnemyType.VeryBad
}
};
}
}
公共类EnemyData
{
public int-EnemyId{get;set;}
public int-EnemyHealth{get;set;}
公共EnemyType EnemyType{get;set;}
公共字符串EnemyName{get;set;}
}
公共枚举EnemyType
{
不好,,
维里巴德
}
关于:

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
}
类程序
{
静态void Main(字符串[]参数)
{
var enemyDatas=新列表
{
新EnemyData
{
EnemyName=“Name1”,
EnemyHealth=50,
EnemyId=1,
EnemyType=EnemyType.错误
},
新EnemyData
{
EnemyName=“Name2”,
EnemyHealth=100,
EnemyId=2,
EnemyType=EnemyType.VeryBad
}
};
}
}
公共类EnemyData
{
public int-EnemyId{get;set;}
public int-EnemyHealth{get;set;}
公共EnemyType EnemyType{get;set;}
公共字符串EnemyName{get;set;}
}
公共枚举EnemyType
{
不好,,
维里巴德
}

数组,如果您需要已定义的集合并且以后不会更改它。你有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;
}
敌人[]获取敌人(字符串路径){
字符串json=File.ReadAllText(路径);
Root=JsonUtility(json);
归根于敌人;
}

数组,如果您需要已定义的集合并且以后不会更改它。你有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;
}
敌人[]获取敌人(字符串路径){
字符串json=File.ReadAllText(路径);
Root=JsonUtility(json);
归根于敌人;
}


在应用程序中使用数据的最简洁方式是POCO对象和列表。持久化数据-数据库、自定义文件、数据集和xml序列化。JSON序列化,等等,那么一个名为<代码>敌人的类有三个属性呢!或者保存到一个数据库和一个名为
敌军
的表中,该表有三列。@S.Akbari
敌军
=POCO。应该是6行代码,包括{}。你需要一个能保存它的持久器。这就是实体框架本质上所做的-它为您提供了一切查看Unity3DS中的SQLite实现所以如果我想在游戏中更改和添加或删除敌人,数据库(例如SQLite)是最好的?在应用程序中使用数据的最紧凑方式是POCO对象和列表。持久化数据-数据库、自定义文件、数据集和xml序列化。JSON序列化,等等,那么一个名为<代码>敌人的类有三个属性呢!或者保存到一个数据库和一个名为
敌军
的表中,该表有三列。@S.Akbari
敌军
=POCO。应该是6行代码,包括{}。你需要一个能保存它的持久器。这就是实体框架本质上所做的-它为您提供了一切查看Unity3DS中的SQLite实现因此,如果我想在游戏中更改和添加或删除敌人,例如SQLite数据库是最好的?这是更好的答案,imo(以及我正在键入的内容)您应该进一步扩展它,其中包含一个名为
敌军
的类,该类上有
EnemyData
属性,以获取该信息。然后你甚至可以在
敌方
类中有一个方法,按照你需要的顺序一次获取所有数据。这不适合Unity,你不能使用main。这应该给你一个建议。Unity是面向编辑器的,你应该设置你的类,让它在编辑器中显示。这是更好的答案,依我看(还有我打字的过程。)您应该进一步扩展它,其中包含一个名为
敌军
的类,该类上有一个
EnemyData
属性,用于获取该信息。然后您甚至可以在
敌军
类中有一个方法,该方法按照您需要的顺序一次获取所有数据。这不适用于Unity,您不能使用main.Thi统一是面向编辑的,你应该设置你的c