Unity 中经常需要存储数据,比如实现存档功能。这时候便需要把数据保存在文件中,以便数据持久化。
保存数据的文件类型有很多种,其中便包含 CSV 文件类型。
CSV文件类型
CSV,全称为 Comma-Separated Values,中文译名为逗号分隔值。顾名思义,该类文件保存数据的方式便是以逗号分隔。
CSV 文件可以使用 Excel 编辑,但其本质仍是文本文档。
一个常见的 CSV 文件如下图所示:
其在文本中为:
CSV 中分隔符类型可以自义定。
因为其有分隔符的特性,可以很方便的处理简单数据。
读取和写入
Unity 使用 C# 作为脚本语言。而 C# 提供了很多操作文件的类和方法,极大的简化了编写流程。
所用操作文件的方法,都在System.IO
命名空间内。
下面的代码,是我自制游戏 FlappyBird 内所用的。
读取
C# 中有专门读取文件的类StreamReader
。
这里要读取文件内的分数,可以写出如下代码:
1 | private StreamReader Read(string path) |
然后用一个public
方法调用之。
1 | public List<string[]> ReadCsv(string path) |
分隔的字符串,每一行都是一个string[]
,用一个List<string[]>
保存所有内容。
这里的
fileName
是指 CSV 文件的地址,如\save.csv
。
随后便可以根据具体需求,对数据进行处理。
写入
与上文的StreamReader
对应,读取文件用的是StreamWriter
。
其打开文件的方法和上文读取文件的方法类似,故略去。
在我的项目内,我需要对游戏内实时产生的分数写入文件,以形成一个所谓分数排行榜。
所以代码如下:
1 | public void WriteCsv(string[] strs, string path) |
注意
对文件的操作有一些注意事项,下面都是我血和泪的教训。
- 不能写入已经打开的文件。
- 在操作文件之前,要检查文件是否存在。
- 操作文件有一定性能问题,注意不要放在
Update
内。 - 对于 Unity 来讲,文件所在文件夹内必须已经有文件,否则 Unity 打包时不会生成该文件夹。