Godot GDScript 编程
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/godot-gdscript-k25y。
技能介绍
要解决什么问题
在 Godot 4.x 里写或改 .gd 脚本时,常见痛点是:静态类型没写全导致解析期才发现错误、3.x 迁到 4.x 后信号与 yield 语法直接报错,以及把节点引用写在 _init() 里、在 _process 里做物理移动这类「能跑但不稳」的用法。本技能面向 Godot 4.3+(GDScript 2.0),帮助按引擎设计方式写 GDScript,而不是堆经验口诀。
技能如何帮你写对脚本
核心工作流可以概括为几条可执行的约定:
- 尽量写静态类型:如
var hp: int = 10、func add(a: int, b: int) -> int:,或用:=做类型推断,便于解析期报错并减轻 VM 负担。 - 生命周期各用其位:
_ready()做一次性初始化;_process(delta)做每帧逻辑;移动与物理放在_physics_process(delta)(例如move_and_slide())。 - 用
@onready拿子节点引用,不要用_init()——子节点尚未进场景树。 - 用
@export暴露可在 Inspector 里调的参数;事件优先 信号 +await,避免无意义的轮询。 - 先跑 Debugger,从第一个报错改起,后续错误常常是连锁反应。
模式层面会覆盖:带类型与生命周期的脚本骨架、4.x 的 Callable 信号连接与 emit、await 替代 3.x 的 yield,以及 lambda、类型化数组与安全访问等写法。
适用边界与常见坑
- 场景树、实例化、Autoload → 用
godot-nodes-scenes;信号架构与解耦 →godot-signals-groups;C# 而非 GDScript →godot-csharp。 - 3.x → 4.x:
export/onready/tool等改为@export、@onready、@tool;connect("x", self, "_on_x")改为x.connect(_on_x);yield(obj, "sig")改为await obj.sig。 - 整数除法截断(
5 / 2 == 2),需要浮点请用5.0 / 2或显式转换。 class_name全项目唯一,否则无法在其他脚本或 Inspector 里当作类型使用。
使用场景
- Godot 3.x 升到 4.x 后 `.gd` 无法解析,需要把 `yield`、旧式 `connect` 改成 `await` 与 Callable 写法。
- 为新玩法节点写脚本:用静态类型声明变量与函数,在 `_ready`/`@onready` 里绑定子节点,避免 `_init` 里取 `$` 路径。
- 角色移动在 `_process` 里帧率不稳,需要把 `move_and_slide()` 等逻辑迁到 `_physics_process` 并核对 `delta` 用法。
- UI 或关卡流程要等计时器/自定义信号再继续,用 `await` 挂起协程,而不是每帧轮询布尔标志。
适合人员
- 正在把 Godot 3 存量项目迁到 4.x 的独立开发者,需要按新注解与信号 API 逐文件修脚本。
- 在 Godot 4 里写玩法逻辑的程序员,希望团队统一静态类型、生命周期与信号连接约定。
- 与策划同场景协作的 gameplay 工程师,要用 `@export` 把速度、冷却等参数交给 Inspector 调。
- 刚上手 Godot 4 GDScript 的作者,想对照 Debugger 报错理清整数除法、`class_name` 唯一性等常见坑。