导出器
Excel表格作为数据源和编辑器编辑好数据表后,我们需要导出生成Godot可以读取的文件。 在探索最适合Godot的数据表保存方案的过程中,我尝试并实现了以下几种保存方案。
导出器方案
导出器ID | 导出器名称 | Godot 3.x | Godot 4.x | C# | 支持代码配置 |
---|---|---|---|---|---|
GDS1.0 | GodotScript 1.0 | ✔ | ❌ | ❌ | 支持 |
GDS2.0 | GodotScript 2.0 | ❌ | ✔ | ❌ | 支持 |
RESOURCE | Resource | ✔ | ✔ | ✔ | 不支持 |
JSON1.0 | Json | ✔ | ✔ | ✔ | 不支持 |
JSON2.0 | Json | ✔ | ✔ | ✔ | 不支持 |
C# | CSharp | 未开发 | 未开发 | 未开发 | 未开发 |
下面一一介绍这些导出器区别
GDS1.0 和 GDS2.0
这两个导出器是将Excel表格导出成GodotScript脚本类,这个类有个data字典变量,该变量里写满了表格里的数据。
如下所示
# GDS1.0
extends Reference
var None = null
var False = false
var True = true
var data = \
{1: {'array': [1, 2, 3, 4, 5], 'array_bool': [True, False], 'function': funcref(self,'function_1')...
static func function_1(args=[]):
print(args)
# GDS2.0
extends RefCounted
var None = null
var False = false
var True = true
var data = \
{1: {'array': [1, 2, 3, 4, 5], 'array_bool': [True, False], 'function': Callable(self,'function_1')...
static func function_1(args=[]):
print(args)
用GodotScript作为数据源的优点:
- GodotScript脚本除了是源码外,它也是游戏资源,因此直接将数据写到脚本里当数据源可以省略读文件再解析这一步。
- 由于是GodotScript脚本,因此编辑器也会发现其语法错误,也会在运行时准确发现数据的错误。
- GodotScript脚本的加载速度十分的快,比用FileAccess打开要快很多倍。
- 由于是脚本,因此Excel表中可以配置函数代码,如上面例子,function字段是代码。
Note
GDS1.0和GDS2.0导出器区别不是很大,主要是GodotScript1.0和GodotScript2.0里 Reference和Funcref两个类改名成了RefCounted和Callable,因此分开实现了两个导出器。
RESOURCE
这个导出器是以Godot Resource文件作为数据源。
[gd_resource type="Resource" script_class="EEDataTable" load_steps=2 format=3]
[ext_resource type="Script" path="res://Setting/dist/ee_data_table.gd" id="1"]
[resource]
script = ExtResource("1")
data = {1: {"array": [1, 2, 3, 4, 5], "array_bool": [true, false], ...
跟GDS的方案来讲没有什么优势,不支持配置代码,读取效率也很慢。
JSON1.0 和 JSON2.0
用json文本文件作为数据源,跟其他方案比起来,其他方案因为是Godot的资源,因此读和解析是Godot一条龙处理的,而json文本就需要settings.gd
里写方法去读和解析。
json方案并没有什么优点,唯一的优点就是json文件打开来后是人类友好的,比较容易阅读的,其他格式都全生成到一行里了基本无法阅读。
{
"1": {
"id": 1,
"int": 1,
"float ": 1.0,
"string": "恭喜你!成功配置好了Godot导表项目。",
"bool": true,
"array": [
1,
2,
3,
4,
5
],
"array_str": [
"a",
"b",
"c"
],
"array_bool": [
true,
false
],
"dict": {
"name": "Tom",
"age": 10
},
"function": "print(args)"
},...
Note
由于Godot4.0文件读写和JSON的接口发生变动,导致需要两个JSON导出器来分别对应Godot3.x和Godot4.x。
总结
推荐使用GDS1.0/GDS2.0导出器,因为Godot的资源文件读取效率比JSON高,而且GDS1.0/GDS2.0导出器支持配置代码。 目前暂时未支持C#项目用的数据文件。