菜单

场景系统

相关源文件

场景系统是 Godot 引擎中管理游戏对象如何组织、显示以及相互交互的基础架构。它为游戏中的所有对象提供了分层结构,并处理场景切换、对象实例化以及节点在其生命周期中的处理。

概述

其核心是,Godot 的场景系统构建在一个树状结构上,其中 **节点** 是基本构建块。这些节点以分层方式组织起来,形成 **场景**,场景可以保存、加载和实例化。**SceneTree** 管理着这个层级结构,并作为引擎的主循环实现。

来源

关键组件

节点

Node 类是场景系统的基础。它提供了基本功能用于

  • 创建父子关系
  • 处理输入和帧更新
  • 进入和退出场景树
  • 处理信号(Godot 的事件系统)

Godot 中的所有其他节点类型都继承自 `Node` 类,并扩展了特定的行为(2D、3D、UI 等)。

来源

SceneTree

SceneTree 类管理整个节点层级并协调游戏循环。它

  • 维护当前场景的引用
  • 处理场景切换
  • 处理输入事件
  • 管理节点组
  • 向节点传递信号/通知
  • 协调物理和渲染时序

来源

视口

Viewport 为游戏世界提供了视图。它负责

  • 渲染场景的一部分
  • 处理其区域内的输入事件
  • 提供坐标变换
  • 管理相机和音频监听器
  • 支持子视口(视口内的视口)

来源

窗口

Window 类扩展了 Viewport,提供窗口功能。它管理

  • 窗口属性(标题、大小、位置)
  • 窗口模式(窗口化、全屏、最大化)
  • 窗口事件(调整大小、焦点、关闭)
  • 窗口嵌入

来源

节点生命周期

节点进入和退出场景树时会遵循特定的生命周期。理解这个生命周期对于正确的场景管理至关重要。

当一个节点被添加到场景树时

  1. 它的 `_enter_tree()` 方法会被调用
  2. 它的所有子节点也会发生同样的情况(从父节点到子节点)
  3. 当所有子节点都添加完毕后,`_ready()` 方法会被调用
  4. `_ready()` 回调按相反顺序发生(先子节点,后父节点)

处理时

  1. 节点每帧都会收到 `_process(delta)` 回调
  2. 它们以固定的物理间隔收到 `_physics_process(delta)`
  3. 处理按优先级顺序进行,然后是树顺序

当一个节点被移除时

  1. 它的 `_exit_tree()` 方法会被调用
  2. 节点及其所有子节点都会被移除
  3. 如果调用了 `queue_free()`,节点将在当前帧结束时被删除

来源

场景管理

场景创建与组织

场景是节点的层级集合,可以保存到磁盘并多次实例化。场景的顶层节点称为该场景的“根节点”。

场景实例化

Godot 场景系统最强大的功能之一是能够将场景实例化到其他场景中。这实现了模块化设计和组件重用。

场景切换

SceneTree 通过 `change_scene_to_file()` 和 `change_scene_to_packed()` 等方法管理场景切换。

来源

分组和信号系统

节点分组

节点可以组织成组,以便于管理

SceneTree 提供用于处理组的方法

  • `call_group()`:调用组中所有节点的某个方法
  • `set_group()`:设置组中所有节点的某个属性
  • `notify_group()`:向组中所有节点发送通知

来源

输入处理

场景系统包含一个全面的输入处理机制

输入传播顺序

  1. 事件首先通过 `_gui_input()` 方法发送到 GUI 控件
  2. 如果控件未处理,则发送到其父节点,依此类推
  3. 如果没有 GUI 控件处理,则它被视为“未处理”
  4. 未处理的输入随后通过 `_unhandled_input()` 发送给处理未处理输入的节点

来源

坐标系与变换

场景系统管理多个坐标系

Viewport 管理这些坐标系之间的变换,并提供在它们之间进行转换的方法。

来源

GUI 系统集成

场景系统与 Godot 的 GUI 系统集成,其中 Control 节点(UI 元素)组织在同一个场景树中

控件使用特殊的锚定和尺寸系统进行布局

来源

主题系统

控件可以使用主题系统进行样式设置,主题系统提供了一种定义和重用视觉属性的方法

主题可以

  • 在项目设置中全局设置
  • 在控件节点上设置,影响该控件及其所有子控件
  • 在各个控件上覆盖

来源

视口和渲染

视口系统处理渲染管线并管理场景中哪些部分是可见的

视口可以嵌套,从而实现画中画、分屏和渲染到纹理等技术。

来源

结论

Godot 的场景系统提供了一种灵活的层级结构来组织游戏对象。它管理节点的生命周期,协调输入处理,并与渲染和 GUI 系统集成。通过理解节点、场景和场景树如何协同工作,开发人员可以创建结构良好且易于维护的游戏。

场景系统的优势在于其模块化和灵活性,允许将场景实例化到其他场景中,从而在保持组织性的同时创建复杂的层级结构。这种架构是 Godot 引擎处理游戏开发的核心。