在游戏制作中,我们的许多数据都是需要从文件里面读取,比如常用的装备数据,怪物数据,关卡数据等等,所以如何从文件中读取这些数据就变得尤为重要,因为将游戏数据放入文件中,会大大提高我们制作和调整游戏的效率,所以本例中我们来看看Unity中如何通过CSV文件来读取游戏数据
一般情况下,制作游戏数据会用到表格软件,windows下常用Excel,而Mac下常用Numbers,而这两种软件都可以导出我们本例所需要的文件——CSV文件
首先我们打开Numbers,新建一个文件
新建一个Numbers文件
然后输入我们需要的内容,如下:
表格内容
这就简单的制作了一个装备数据表,每件装备我们假设它有5个属性:
数据填写完之后,我们就可以选择文件->导出到->CSV…
导出CSV
然后在弹出的对话框,直接点击下一步:
下一步
然后在接下来的对话框中,选择文件名和保存路径:
选择文件名和保存路径
导出后,我们找到myTest.csv文件,打开可以看到:
**myTest.csv**文件内容
我们可以看到我们刚刚制作的表格数据都被以文本的方式保存下来了,并且使用了“,”号来进行分割,而CSV的中文翻译就是逗号分隔值。但是我们会发现一个问题,为什么后面会多了那么多逗号呢?那是因为我们导出的时候没有将空的单元格删除掉
都是空单元格的错
所以我们导出CSV文件是,记得要删除掉那些空的单元格,如下图:
删除空单元格后的表格
然后我们再导出一次,并打开导出的文件查看,就会发现那些多与的逗号没有了
终于正常的CSV文件
有了CSV文件后,下一步就是将它放入Unity中,并让Unity读取里面的数据,首先我们新建一个Unity工程,然后将我们刚刚创建的CSV文件放入Unity的资源目录下,本例中我们选择放入在*Asset->Res文件夹下面(Res文件夹需要大家自己创建)
CSV文件放在Unity中的位置
然后我们新建一个名为CSV的脚本,打开进行编辑,输入一下代码:
完整的代码
写完代码,保存一下,然后我们在创建中新建一个空的GameObject,命名为FileController,并且为挂载一个新的脚本文件FileController,用来控制文件的读取。
FileController
然后打开FileController脚本,输入下面的代码:
完整的代码
写完代码,保存一下,然后回到Unity编辑器,运行游戏,可以在后台打印中看到如下数据:
后台打印的数据
可以看到,现在我们已经可以读取到文件里面的内容了,并且是可以分解每一行的内容分别是什么,但是这样的解析程度还远远不够,不能为我们所用,假设我们游戏中需要生成一件装备布衣,我们需要通过文件获得布衣的每一个属性,如布衣的等级,增加的防御值等属性,我们就需要将每一个数据单独提取出来,所以我们需要可以指定获得某一个单元格里面的数据才行,下面就来看看怎么实现
现在我们的m_ArrayData里面存放的是一行的数据,也就是说其实m_ArrayData[0]就是取我们第一行的数据,m_ArrayData[1]就是取我们第二行的数据,那么接下来我们只需要再进行一下解析,将每一行的数据按照列数来拆解,这样我们就可以通过行数+列数来确定指定数据了,先直接上代码:
Paste_Image.png
写完代码,保存一下,然后我打开FileController脚本,修改代码如下:
完整的代码
写完代码,保存一下,大家可以先思考一下,上面打印的两个数据分别是上面内容,然后在运行游戏,检查一下实际结果是否和你想象的一样
具体对应的数据
打印结果
前面我们提到过,关于文件路径的存放位置,在本例中我们使用了Application.dataPath来指定路径位置,关于路径有4个类型:
关于这4种路径的详细地址,大家可以试着在Unity里面用Debug.Log语句将其打印出来,看到完整的路径会便于理解
在运行程序的时候会出现中文乱码的情况,解决方法,右击文件——打开方式——记事本,然后文件——另存为
在下面修改编码格式为UTF-8,然后保存,拖入unity即可。
作者:Zui
链接:https://www.jianshu.com/p/ffda934b5e15#
來源:简书