Godot开发
Godot 简介 — 4.7 分支
文档版本
本文档基于 Godot 4.7(master 分支),内容参考 Godot 官方文档。如需查阅其他版本,请访问 Godot 官方文档站。
Godot 是什么?
Godot 是一款免费、开源、社区驱动的 2D/3D 游戏引擎。你可以用它创建游戏或应用程序,发布到桌面、手机和 Web 平台。
它始于 2001 年阿根廷一家游戏工作室的内部项目,2014 年正式开源后经历了完全重写。知名作品包括 Cassette Beasts、Usagi Shima 等,开源工具 Pixelorama 也用 Godot 开发。更多案例见官方展示页。
一切皆场景 — Godot 的核心哲学
一个场景就是一个 .tscn 文件,Godot 的核心就是无数个 .tscn 组成一个游戏的运行全部。
这是理解 Godot 最重要的一句话。在 Godot 里,"场景"不是"关卡"的代名词——角色是场景、武器是场景、一颗子弹是场景、UI 按钮也是场景。你把不同的 .tscn 文件像乐高积木一样拼装嵌套,最终构成一整个游戏。
这个"一切皆场景"的设计哲学,是 Godot 区别于 Unity(Prefab 预制体)和 Unreal Engine(Blueprint 蓝图类)的最显著特征。它让游戏开发变得高度模块化——修改一个 .tscn,所有引用它的地方都会自动更新。
.tscn 是什么?
.tscn 是 Godot 的文本场景格式(Text SCeNe),人类可读、Git 友好。编辑器里的场景树保存下来就是一个 .tscn 文件。运行时通过 PackedScene.instantiate() 动态创建实例。
核心概念速览
Godot 围绕 四个核心概念 运转:节点、场景、场景树 和 信号。
下面这张图模拟了 Godot 编辑器中真实的场景树。红色方块是某个 .tscn 文件的根节点(即场景实例),蓝色圆角是该场景内部的子节点。
关键理解:场景实例化后不会产生"中间层"。
Player.tscn的根节点CharacterBody2D直接挂在Main下面,而不是Main → Player → CharacterBody2D。编辑器中通过节点名称旁的特殊标记来区分"这是一个场景实例"。
图例说明
- 红色方块 = 场景根节点:某个
.tscn文件的根节点,代表一个场景实例 - 蓝色圆角 = 子节点:场景内部的普通节点
Player.tscn的根节点CharacterBody2D直接是Main的子节点——场景之间没有"包装层"UI.tscn的根节点VBoxContainer同理,直接挂在Main下面
节点 (Node) — 最小功能单位
一句话理解:节点是 Godot 的最小单位,不同的节点提供不同的功能——有的负责显示图片、有的负责碰撞检测、有的负责播放声音。把它们组合在一起就能造出任何东西。
场景 (Scene) — 一个 .tscn 文件
一句话理解:把一组节点拼成一棵树,保存下来就是一个 .tscn 文件——这就是一个场景。场景就是"节点组合的存档",下次直接用,而且可以在不同地方反复使用。
看上面的图:
Player.tscn— 角色的身体、外观、碰撞体、摄像机拼好保存UI.tscn— 分数标签、血条、按钮拼好保存Main.tscn— 把 Player 和 UI 组合在一起,作为游戏入口- 修改
Player.tscn,所有引用它的地方都会自动更新
场景树 (Scene Tree) — 游戏运行时的全部
一句话理解:游戏启动时,Godot 加载主场景 .tscn,所有嵌套的场景和节点展开成一棵完整的大树——这就是场景树。你的整个游戏全都在这棵树里运行。
信号 (Signal) — 节点间的广播通信
一句话理解:信号就是节点发出的"广播通知"。按钮被点击、怪物被消灭——节点大喊"这件事发生了!",其他节点听到后做出反应。
- 按钮被按下 → 发出
pressed信号 → 开始游戏 - 两个物体碰撞 → 发出
body_entered信号 → 扣血 - 自定义信号:
signal health_changed(new_health)
脚本 (Script) — 给节点写行为
一句话理解:脚本告诉节点"怎么动、怎么反应"。没有脚本的节点是静态的,加上脚本就活了。
- Godot 推荐 GDScript(类似 Python,上手极快)
- 也支持 C#(.NET)和 C++(GDExtension)
- 一个脚本通常对应一个节点,通过
extends关键字声明
资源 (Resource) — 可共享的数据包
一句话理解:资源是独立于节点的数据容器。图片是资源、音效是资源、材质是资源。多个节点可以共享同一个资源,改一处处处生效。
Texture2D— 图片AudioStream— 音频Material— 材质PackedScene— 场景资源(即.tscn文件在引擎中的表示)
概念对比:Godot vs Unity vs UE5
| Godot 概念 | 一句话理解 | Vue 等价 | Unity 等价 | UE5 等价 |
|---|---|---|---|---|
| Node 节点 | 最小功能单位,组合造万物 | Component 组件 | GameObject | Actor |
| Scene 场景 | 保存为 .tscn 的节点树,可复用可嵌套 | .vue 单文件组件 | Prefab + Scene | Blueprint + Level |
| Scene Tree 场景树 | 游戏运行时的完整节点树 | 根 .vue + 子组件树 | Hierarchy | World / Level |
| Signal 信号 | 节点间的广播通知 | emit() / defineEmits | UnityEvent | Delegate |
| Script 脚本 | 给节点写行为逻辑 | <script setup> | MonoBehaviour | Blueprint / C++ |
| Resource 资源 | 可共享的数据包(图片、音效、场景等) | 静态资源 + 数据文件 | ScriptableObject | DataAsset |
设计哲学:组合优于继承
Godot 的场景系统体现了组合优于继承(Composition over Inheritance)的设计原则:
- 不用写一长串的类继承链(
Player→Character→Entity→Object...) - 而是把功能拆成小场景(
.tscn),像乐高积木一样拼装 - 需要飞行功能?给角色场景加一个
Wings.tscn子场景 - 需要武器?加一个
Weapon.tscn子场景 - 每个子场景都可以独立开发和测试,互不干扰
这就是 .tscn 文件的威力——无数个 .tscn 文件,构成了 Godot 游戏的全部。
