SceneGen

渲染 Godot 项目的场景文件 (.tscn) 中每个节点的类型化描述。提供一个名为 node() 的访问函数来获取对节点的引用。此工具旨在与 Miguel de Icaza 的 SwiftGodot 绑定一起使用,并生成依赖于 SwiftGodot 的 Swift 代码。

示例

A Node Tree in Godot

在 SwiftGodot 中,节点引用如下所示

let marker = getNodeOrNull("Sprite2D/Marker2D") as? Marker2D

这要求程序员确保节点路径及其类型正确。如果存在不匹配,则 marker 变量将为 nil。

如果我们在该项目上运行 SceneGen,我们的根 Player 类型将被扩展为每个节点的类型化描述。 然后可以通过类型安全的方式访问这些节点

let marker = node(.sprite2D_marker2d)

程序员不再负责维护类型和路径。这将减少运行时错误和崩溃,在您的 IDE 中提供有用的代码完成建议,并允许更快的迭代周期。

用法

我仍在研究如何运行此工具的 Swift PM 方案,但在过渡期间,以下是一种有效的方法

  1. 如果您还没有安装 Mint,请安装 Mint (brew install mint)。
  2. 将名为 Mintfile 的文件添加到您的项目,并在其中放入 PadraigK/SceneGen@0.1.2(或任何最新的发布标签)。
  3. 运行 mint bootstrap(需要一段时间,大约 5 分钟)
  4. 使用 mint run scenegen <project-path> <output-path> 运行代码生成——请注意,每次运行代码生成之前,输出路径都将被删除。 如果您删除或重命名场景,则必须这样做才能清理。

与 Watcher 一起使用

建议将 SceneGen 与 watcher 一起使用,例如 entr,它可以用于在任何场景文件更改时重新运行生成。

我建议创建一个如下所示的 shell 脚本

#!/bin/zsh

# loop because the `-d` flag on `entr` makes it exit when it 
# detects a new or deleted file in any of the folders its watching,
# otherwise it would only detect modifications to existing files
while sleep 0.1; do
	find ../ -name '*.tscn' -not -path '*/.*' | entr -d -s 'mint run <project-path> <output-path>'
done

然后在您工作时将其留在终端窗口中运行。

好处