一般的,策划给到的表格即配置表unity是无法直接使用的,需要我们程序做进一步处理,并读取和序列化。做配置表大多是将表格数据读取后序列化到一个bin文件即二进制文件里,然后在unity运行时去解析,反序列化。当然,这是相对高端技术,为了方便,和小型游戏使用,个人采用另外一种方式,即将Excel表在外部读取,然后json成序列化字符串存入一个文本txt。然后unity里头在运行前进行解析,存储到asset文件。对于编辑器扩展或者 asset 文件不懂点的可以去充下电。
上面是大致的思路,接下来开始实现。
首先要有一个能度表格的工具,经过筛选,我决定使用spire类库,相对易于使用,工具 这里是一个研究spire时候做的一个excel工具,可以下载看看,因为接下来的所有都是基于该工具。
接下来说一下这个工具。由于是unity外部,所以采用窗体程序,排版如下(简陋,勿喷):
运行后要先选择文件,点击后会弹窗选择Excel文件,这里支持的Excel为07,10,13,如果你安装了其他版本,你可以更改代码,增加支持你安装的版本。具体代码就不在说了,因为代码很简单(……-……)
选定后会有你选择 的文件的路径信息,这时点击序列化,当左侧出现成功,和文件存储位置时,表明成功。(路径默认为你打开的文件的目录下的serlizeFIle文件夹内,会自动创建)。打开文件夹,就可以发现有你表格序列化好的json格式的txt文本。
因为每个表格都会有一个对应的类用于接收数据,为了统一和安全起见,这个数据类我们做到unity外部,作为dll导入unity使用,这时,该工具项目的内容大致如下:
其中data就是最终的类库dll。当然有更改要右键重新生成一下的。class1里边就是对应表格的类。
接下来简单介绍一下解析:
由于没有找到如何动态去获取某一个单元格的数据,只知道指定的方式,所以这里将获取列的数据列表,和行的数据列表,然后自己计算每个数据格子的坐标如【“C3”】等,然后使用坐标值来读取,并存入对应的类,最后将所有的类的链表进行json序列化存入txt
就基本上工具就okl了,接下来讲解反序列化,unity使用。
em ,首先我们需要创建一个asset文件去接受数据,这个不做介绍。但是我们会发现一个问题,就是在编辑器模式下asset文件类没办法调用,即使做成单例,所以要作为资源文件去加载使用,然后解析,存储,如下;
当然,这个方法要想在非运行状态下执行,要使用编辑器扩展,这个也不做介绍,基本功,不会的去充下电***
然后,在你的主控制器里头定义一个public的变量来接受这个asset文件,这样运行时就可以访问了,到这,基本上功能就实现了。经过测试,完美运行,数据获取成功!!
但是注意,打包的时候要把反序列化的哪个脚本和编辑器的东西都删除,否则大不了包。
好了,欢迎各位提出指导性意见和建议!!