SuperAPI AI 工具集

godot-nodes-scenes

通用与其它

查看项目

更新于 10-16 08:47

技能介绍

用途:在 Godot 4.7 中组织 .tscn 场景结构与节点组合,适合把功能拆分为节点、实例化 PackedScene(子弹、敌人、UI)、配置 autoload 单例,以及排查 get_node()/$Path 返回 null、调用已释放实例等节点访问问题。该技能不覆盖 GDScript 语法、信号解耦、物理碰撞等主题,这些分别属于 godot-gdscript、godot-signals-groups、godot-physics。

主要能力与做法:以组合方式建模,场景是保存为 .tscn 的节点树,构建 Player、Bullet、Enemy 等单一职责的小场景,再由它们组合出更大场景,优先添加子节点而非深层继承。给场景根节点挂脚本并用 @export 暴露配置,使其可复用为 PackedScene。运行时实例化流程为 preload/load 载入场景后调用 scene.instantiate(),再 add_child(instance);可在 add_child 前后设置位置与状态。固定子节点用 @onready var x = $Path,深层节点用唯一名 %Name,避免假定节点仍存在。全局状态与服务(游戏状态、音频、场景切换)放入 autoload,在 Project Settings > Globals (Autoload) 注册后可按名称全局访问。释放节点用 queue_free(),之后访问前用 is_instance_valid() 判断。切换运行场景使用 get_tree().change_scene_to_file() 或 change_scene_to_packed()。

限制与注意:$Path/get_node() 在路径错误或节点尚未入树时返回 null 或报错,应使用 @onready、核对路径,可选节点用 get_node_or_null()。重命名节点会破坏 $Path,建议改用以右键“Access as Unique Name”设置的唯一名。free() 在帧中可能导致其他代码崩溃,优先 queue_free()。子节点 _ready() 仅在入树后执行,其 @onready 变量在此之前不可用。Autoload 按列表顺序在主场景之前加载,不能依赖主场景已存在。Godot 4 中 instance() 改名为 instantiate();preload 在解析时运行(路径须为常量),load 在运行时运行(路径可为变量)。change_scene_to_file() 是延迟执行的,调用后旧场景树在当前帧结束才被替换释放,不能在同一行读取新场景节点,应在新场景的 _ready() 中处理。