satgo1546’s ocean

Any sufficiently primitive magic is indistinguishable from technology.

4202年的Godot

插播一条说明:Godot是《等待戈多》里的戈多,所以它不读go dot。

上次调研Godot的时候,Godot 4还处于4.0.3版办法,差不多是刚发布的公测阶段,教程、文档、宣传视频都尚未更新,给刚开始尝试的我带来了很多混乱。现在,一年多过去了,官网和社区已经全面转向Godot 4,现在是个再次开始的好机会。

你猜怎么着?就像Windows、DOM、PixiJS、Three.js那样,Godot也有场景图,每个场景都包含一棵节点树。这真是个绕不开的话题。

那么它是否也有夺取数据所有权的问题呢?并不完全是。确实必须修改节点属性,才能将数值反映到界面上。但是,Godot有场景的概念。场景可以被当作节点实例化,所以Godot中的场景实际上是HTML自定义元素,或称组件。(Godot文档中特地指出“场景”与其他游戏引擎中“组件”的概念不同,是因为其他游戏引擎对组件的定义是基于实体-组件-系统架构的定义,不同于前端框架库对组件的定义。)此时,用户可以将自己制作的节点放入场景图中,拥有自定义的行为,在引擎的基础上构建,而不是受限于场景图中有限的节点类型,只能把场景图单纯作为输出。组件化是构建现今Web UI的基石思想,Godot将其应用到游戏引擎领域独树一帜。

DOM Godot
元素 节点
自定义元素 场景
影子DOM 场景树
事件 信号
ID 唯一名称(%引用)
CSS类 分组

Godot支持自研脚本语言GDScript,也支持C#。我不会C#,所以先看看支持度更高的GDScript。但我很可能会现学C#。取决于设计预期用途,像GDScript这样的专用语言往往存在设计缺陷。(但看得出来至少设计得比AutoHotkey好。)因为配套工具的缺乏,如果用该语言实现了一些通用逻辑,后续也很难移植到其他语言。

目前发现的诡异的语言设计:

2D教程有一些明显不符合最佳实践的操作,不知是否为了简单起见所致。

我觉得Godot是个很正常的游戏引擎,而正常是难能可贵的性质。