CSV是一种简单、实用的文件格式,用于存储和表示包括文本、数值等各种类型的数据。其显著特点是:文件内的数据以逗号 , 分隔,呈现一个表格形式。
在进行游戏制作时我们会需要使用到表格信息,如物品的名字,价格,序号等。可以在CSV文件中很方便的进行编辑和修改。
要对CSV文件进行读取还是比较简单的,我们可以将其以文本的形式打开来读取。
1 2 3 4 5 6
|
TextAsset EnemyDatas = Resources.Load<TextAsset>("DataAssets/EnemyData");
|
因为文件内的数据以逗号 , 分隔来组成表格,每一行数据的结尾都是换行符”/n”,我们首先可以按行分割数据,再将结果存在数组当中。
1 2 3
| string[] str_row = EnemyDatas.text.Split("\n"); Debug.Log("str_row.Length");
|
然后再通过以逗号按列分割再存入数组当中就可以直接用了,但是这样的话在使用的时候我们不清楚数据是拿来做什么的,还得去翻原始表格。而且每次使用时都要先读取一次,不太方便。于是下面打算给他读取之后存起来。
于是在这里先建立两个类,按照表格的内容给每个元素分配一个简单好辨识的名字,在实际工程中我通过summary为每个变量注释了一下,更好分辨其作用,起名字就可以很随意了。
1 2 3 4 5 6 7 8 9 10 11 12 13
| [System.Serializable] public class Enemy { public string Id; public string Name; public string Jianjie; public uint health; public uint wuli; public uint yuansu; public string lujin; public uint FirstTime; public uint gailv; }
|
1 2 3 4
| public class EnemyManager : ScriptableObject { public Enemy[] dataArray; }
|
贴一张读取的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 做好上面的部分之后我们只需要将数据转移再生成文件就好了 public static Enemy[] ReadCSV() { TextAsset EnemyDatas = Resources.Load<TextAsset>("DataAssets/EnemyData"); string[] str_row = EnemyDatas.text.Split("\n"); int rowNum = str_row.Length - 1; Enemy[] enemy_array = new Enemy[rowNum - 1]; for (int i = 1; i < rowNum ; i++) { string[] collect = str_row[i].Split(","); Enemy enemy = new Enemy(); enemy.Id = collect[0]; enemy.Name = collect[1]; enemy.Jianjie = collect[2]; enemy.health = uint.Parse(collect[3]); enemy.wuli = uint.Parse(collect[4]); enemy.yuansu = uint.Parse(collect[5]); enemy.lujin = collect[6]; enemy.FirstTime = uint.Parse(collect[7]); enemy.gailv = uint.Parse(collect[8]); enemy_array[i - 1] = enemy; } return enemy_array; }
|
然后利用objectscript类存起来就好了,下面是生成文件的代码。这里是将文件放在了Assets/Resources/DataAssets路径下名为Enemy的Asset文件当中。
1 2 3 4 5 6 7 8 9
| public static void CreateEnemyAsset() { EnemyManager enemyManager = ScriptableObject.CreateInstance<EnemyManager>(); enemyManager.dataArray = ReadCSV(); string assetPath = string.Format("{0}{1}.asset", "Assets/Resources/DataAssets/", "Enemy"); AssetDatabase.CreateAsset(enemyManager, assetPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }
|
这样做完后我们在更变CSV文件后只需要读取一次数据,以后只用去使用转存后的数据了。还可以利用哈希表制作索引帮助读写文件
(从我的CSDN搬运而来)