我是C#和Unity初学者,我正在编写太空射击游戏。我想创建一个包含敌方数据(EnemyID, EnemyHealth, EnemyType)
的表格。我应该使用数组,列表还是字典?
实施例:
|EnemyID|EnemyHealth|EnemyType
|001 |50 |enemy1
|005 |100 |enemy2
...
但如何保存呢?必须可以添加或删除Enemy并更改其健康状况......我是否需要数组,列表或字典?
答案 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;
}