上一篇主要实现了实现操作杆控制player的旋转,本来今天想实现主角的移动加边界值处理的。
但有个问题,就是不论边界值还是移动的相关的参数(速度,加速度)都要保存一个地方,嗯,就是表,后面道具和enemy都需要用到表。
所以今天的主要工作就是来实现导表工具来导出asset。
我们这个游戏用到的表不会太多,所以打算用scriptobject来存储表结构,测试、维护都比较方便。
**********************************************强行分隔符******************************************
导出表asset主要分2个步骤,第一步先将xlsx导出csv;
第二步将csv转成自动生成的对应的asset;
好了,先来实现第一步。如何将xls生成csv,百度一下,用到的最多的方式是python。。。
那我们也采用python,然而。。。
唔。。。
官网上最新的版本是3.9.2,那就用这个吧
安装好了
这里注意在环境变量中添加Python目录:
在命令提示框中(cmd) : 输入
path=%path%;C:\Python39
按下 Enter。
注意: C:\Python39 是Python的安装目录。
python现在安装好了,但是要想读取excel,还必须添加xlrd模块。
xlrd模块特点:xlrd是读取excel表格数据;支持 xlsx和xls 格式的excel表格
添加模块:pip3 install xlrd
查看已有模块:pip3 list
好,现在先来创建一个Global.xlsx文件,用来保存一些全局的数据比如player的处所数据。
接下来就是执行py文件了,py中的核心功能其实读excel,写入到csv。
部分代码如下:
读取excel:
xlsfile = xlrd.open_workbook(filename)
table = xlsfile.sheet_by_index(0)
rownum = table.nrows
colsnum = table.ncols
生成csv:
if not os.path.exists(path):
os.makedirs(path)
csvfile = open("tmp", "w", newline="")#, encoding="utf-8-sig")
writer = csv.writer(csvfile)#,lineterminator='\n')
writer.writerows(content)
csvfile.close()
if os.path.exists(os.path.join(path,filename)):
os.remove(os.path.join(path,filename))
os.rename("tmp", os.path.join(path, filename))
最终效果如图:
生成csv成功了,不容易啊。
可能会出现的问题:
1、执行py文件时,报错xlrd.birffh.xlrderror:excel xlsx file;not supported:
解决方法:降级安装xlrd
pip3 uninstall xlrd
pip3 install xlrd==1.2.0
2、python3生成出的文件每行会多一个空行:
python3里面对 str和bytes类型做了严格的区分,不像python2里面某些函数里可以混用。所以用python3来写wirterow时,打开文件不要用wb模式,只需要使用w模式,然后带上newline=‘’
下面就该要实现第二步的内容了,将csv转成自动生成的对应的asset。
scriptobject核心就是要有个模板,而每个表所对应的字段又是不一样的,所以就得分2步,第一步生成每个表所对应的数据结构,第二步通过对应的表结构生成对应的asset文件。
先看效果:
效果看来功能是实现了,那么具体实现我来盘一下。
首先先创建一个模板,然后解析我们的csv文件,将对应的数据填入到模板中,再通过文件读写生成cs类文件。
//This is Generate Auto By GenerateScript.cs
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class {0}
{
{1}
{2}
}
0,1,2分别对应类名,变量名及属性,当然如果自己想要一些其他的,可自行添加
public partial class {0} : ScriptableObject
{
[SerializeField] public List<1> Datas;
}
0,1分别代表类名及刚才定义的结构对象
var asset = ScriptableObject.CreateInstance(scriptObjectName);
生成asset文件。
总结:今天主要把打表工具流程给疏通了一遍。主要分2个步骤,一是生成csv,二是生成asset。后面配置表就简单多了,接下来的话,还要整个读表的流程以及player的移动。
传送门:独立游戏开发--索引