用途:帮助开发者把 Godot 3.x 项目移植到 Godot 4,重点处理 GDScript 2.0 语法、新 Tween 系统与导出注解的变化。适用于升级后出现语法错误、替换已废弃节点(如 Tween 节点改为 create_tween)以及把导出变量改成 @export 注解的场景。
迁移流程:在备份分支或副本中操作;选定确切的 Godot 4 版本;改动文件前先验证转换结果,检查转换器未覆盖之处、被重命名的节点、着色器、物理、插件与导出目标;在替换可用的 Godot 3 构建前测试场景与存档。官方参考为“Upgrading to Godot 4”。
主要变更:注解使用 @,如 export var x 改为 @export var x,onready var y 改为 @onready var y,tool 改为文件顶部的 @tool。属性改为内联 setter/getter,Godot 3 的 var health setget set_health, get_health 改为在变量下用 set(value) 与 get 块,并可配合自定义 signal。Tween 节点在 Godot 4 被移除,改用 create_tween(),例如 var tween = create_tween(); tween.tween_property($Sprite, "position", Vector2(100, 100), 1.0); tween.parallel().tween_property($Sprite, "modulate:a", 0.0, 1.0)。信号连接改用可调用对象,如 pressed.connect(_on_pressed),不再用字符串连接。yield 改为 await,如 await get_tree().create_timer(1.0).timeout。支持类型化数组,如 var enemies: Array[Node] = []。
最佳实践:使用 @export_range、@export_file 等改善检视面板;为变量标注类型;用 super() 调用父类方法;尽量用信号对象 name.emit() 而非 emit_signal("name")。
常见问题:出现 “Identifier 'Tween' is not a valid type.” 时,应在 Node 上下文中使用 var tween: Tween = create_tween(),而非场景节点或 SceneTreeTween 类型。
限制:仅在任务明确匹配上述范围时使用;输出不能替代针对具体环境的验证、测试或专家审查;若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。性能收益需实测,不要假定类型化数组必然加速。