节点与场景

节点与场景

节点 (Node)

节点是 Godot 中游戏对象的基本单位,每个节点都有特定的功能。

常用节点类型

基础节点

渲染节点

物理/碰撞节点

UI 节点

功能节点

节点树结构

# 获取子节点
var child = get_node("ChildName")
var child2 = get_node("Parent/Child/Grandchild")
var child3 = $ChildName  # 语法糖

# 获取所有子节点
var children = get_children()

# 获取父节点
var parent = get_parent()

# 添加/移除子节点
add_child(new_node)
remove_child(node)

节点生命周期

# 当节点进入场景树时调用
func _enter_tree() -> void:
    pass

# 当节点及其子节点都 ready 后调用(常用)
func _ready() -> void:
    pass

# 当节点离开场景树时调用
func _exit_tree() -> void:
    pass

# 每帧调用(处理逻辑)
func _process(delta: float) -> void:
    pass

# 物理帧调用(固定时间步长)
func _physics_process(delta: float) -> void:
    pass

# 输入事件
func _input(event: InputEvent) -> void:
    pass

场景 (Scene)

场景是节点树的保存,是 Godot 的组织方式。

创建场景

  1. 新建场景
  2. 选择根节点类型
  3. 添加子节点
  4. 配置节点属性
  5. 保存场景 (Ctrl+S)

场景实例化

# 加载场景
var enemy_scene = preload("res://scenes/Enemy.tscn")

# 实例化场景
var enemy = enemy_scene.instantiate()

# 添加到场景树
add_child(enemy)
enemy.position = Vector2(100, 100)

场景树 (SceneTree)

Main (Scene)
├── Player (Scene)
│   ├── Sprite2D
│   ├── CollisionShape2D
│   └── Camera2D
├── Enemy (Scene)
│   ├── Sprite2D
│   └── CollisionShape2D
└── UI (Scene)
    ├── HealthBar
    └── ScoreLabel

场景组织原则

  1. 单一职责:每个场景做一件事
  2. 可重用:将通用功能做成独立场景
  3. 层次清晰:保持场景树结构简单
  4. 模块化:通过实例化组合复杂场景

场景继承

# 子场景可以继承父场景并添加内容
# 在编辑器中:New Inherited Scene

场景变换 (Transform)

# 2D 变换
position = Vector2(100, 50)      # 位置
rotation_degrees = 45.0          # 旋转(度)
scale = Vector2(2, 2)             # 缩放

# 3D 变换
position = Vector3(0, 1, 0)
rotation_degrees = Vector3(0, 90, 0)
scale = Vector3(1, 1, 1)

常用节点属性

# 可见性
visible = true

# Z 轴顺序(2D)
z_index = 1
z_as_relative = true

# 分组(用于批量管理)
add_to_group("enemies")
is_in_group("enemies")
get_tree().call_group("enemies", "take_damage")