unity 关于静态数据表excel(原)

来源:互联网 发布:陶哲轩的老婆劳拉知乎 编辑:程序博客网 时间:2024/05/08 07:38

游戏开发中,静态数据一般是策划配置的,一般采用excex编辑或写数据编辑器输出数据,那么问题来了,如果使用excel,策划配置好的excel输出成什么格式更方便程序使,又好维护呢?

方法一 json

优点:通用,易读,数据可以嵌套

缺点:操作麻烦,二次编辑麻烦

方法:excel先输出成txt,格式为制表符分隔或unicode,然后写工具将txt转成json格式,然后程序中使用json格式读取解析,当然你也可以不转json格式,程序中直接用对应的解析方式解析,但一般数据表会给客户端和服务器同时使用,而json格式比较通用,易读,客户端和服务器不同编程语言大多都能找到对应的解析类库,并且json数据格式可以嵌套,如果做数据编辑器的话,数据格式清晰,但转成json格式完全为了统一方便,并不是必要的

方法二 csv

优点:excel可直接打开,可以二次编辑,易读,

缺点:数据不可以嵌套,编码限制

 方法:输出成csv,csv格式有个天生的优势,就是excel可以直接打开,这样策划可以二次编辑,更便于维护,易读性更高,但excel对csv会做一些处理

当内容中有英文逗号时,会在内容前后自动添加英文引号,因为csv是以英文逗符为列分隔符,excel为了区别所以自动添加,但打开后转码后又将去掉,然后显示出来

编码也有要求,excel保存csv的编码是GB2312,并且打开时也需要是,不然中文会显示成乱码,英文不受影响


其实方式,包括二进制或自己定义的格式,只要保存的数据和解析方对应上就可以,不同情况时使用适应的就好,(注意文件大小,后期可维护性,可读性)

如果不考虑数据编辑器的话,单纯说excel,推荐第二种方法,数据嵌套也不是必须的,程序中完全可以解析后在重新组织合适的数据结构


下面说下unity开发中,使用csv的陷阱

在unity开发中,一般资源或文本数据大多会使用Resource.Load方法,这个方法可以加载资源或其它格式,大家都应该很熟悉,我们加载csv后,会强转成TextAsset,这时会发现里面的数据中文都没了,这是因为unity加载csv或txt时,认为这是文本文件,会使用utf-8来预处理,当返回TextAsset时,数据已经被处理过一次了,但我们的csv为了二次编辑是GB2313编码的,这样加载后得到的TextAsset就是错的

解决办法

1直接将csv文件后缀改成.bytes,这时unity将认为这是二进制文件,不会预处理,这里我们到是的TextAsset就是完整的,然后我们

Encoding.Default.GetString (bytes),这样把TextAsset的bytes给解码就得到完整的string了

2将csv文件用转码工具,转成utf-8格式,这时在Resource.Load时,直接得到的就是对的TextAsset,但这样如果想二次编辑csv文件时,还要在转回去,比较麻烦

3使用system.io读取,完全不用Resource.Load,而StreamReader mysr = newStreamReader(path, Encoding.Default);这样得使用.net直接读文件,然后在用StreamReader 自己的方法将数据读出来,但到移动平台上时,使用IO会有目录权限问题,只可以读取沙箱目录下的文件,但一般游戏最后这种静态数据最后都会做成热更新文件,也必然会在沙箱目录

结论

不使用热更新,使用改后缀名为btyes的方式,

使用热更新,跟据运行平台,开发平台使用Application.dataPath,使用本地资源路径,移动平台使用Application.persistentDataPath,使用沙箱目录


0 0
原创粉丝点击