Godot 是一款开源游戏引擎,适合从 2D 小游戏、独立游戏原型,到中等规模的 3D 项目开发。
它最大的特点是轻量、开源、启动快,节点和场景系统非常清晰。对新手来说,Godot 的门槛通常比 Unity 低;对独立开发者来说,它不绑定商业授权模式,也更容易做出可控的小项目。
这篇文章用最少概念把 Godot 的入门路线讲清楚:你先理解节点和场景,再学 GDScript,最后用一个 2D 小游戏把输入、物理、碰撞、UI、音效和导出串起来。
先说结论
Godot 入门不要一上来就学大而全的引擎功能。
更合理的路线是:
- 先做 2D,不急着做 3D。
- 先理解节点和场景,不急着写复杂架构。
- 先学 GDScript,不急着上 C#。
- 先做一个能跑、能失败、能重开的小游戏。
- 再逐步补动画、音效、UI、关卡和导出。
只要做完一个完整小项目,你对 Godot 的理解会比刷十几个零散教程更稳。
Godot 适合什么人
Godot 很适合这几类人:
- 想从零开始学游戏开发。
- 想做 2D 独立游戏。
- 想快速做玩法原型。
- 不想被复杂商业引擎工具链压住。
- 想理解游戏引擎底层组织方式。
- 有一点 Python / JavaScript 经验,想快速上手脚本。
如果你的目标是大型 3A 画面、复杂商业团队管线、现成资产商店生态,Unity 或 Unreal 可能仍然更成熟。但如果目标是学习和做自己的游戏,Godot 非常适合起步。
安装和项目创建
Godot 的安装很简单。
到官网下载安装包,解压后直接运行即可。它不像很多大型引擎那样必须先装完整启动器,也不需要复杂账号流程。
新建项目时,建议先选:
- Renderer:默认即可。
- Project Name:用英文短横线或下划线。
- 路径:不要放在中文或空格特别多的目录里。
- 版本管理:建议从一开始就用 Git。
第一个项目可以叫:
|
|
项目创建后,Godot 会进入编辑器。你需要先熟悉几个区域:
- Scene:当前场景的节点树。
- FileSystem:项目资源目录。
- Inspector:选中节点的属性面板。
- Script:脚本编辑区。
- 2D / 3D 视图:编辑画面和对象位置。
Godot 的核心:节点和场景
Godot 最重要的概念只有两个:节点和场景。
节点是功能单元。比如:
Node2D:2D 对象基础节点。Sprite2D:显示图片。CollisionShape2D:碰撞形状。CharacterBody2D:可移动角色。Camera2D:2D 摄像机。AudioStreamPlayer:播放音频。Label:显示文字。
场景是一组节点的组合。一个角色可以是一个场景,一个敌人可以是一个场景,一个关卡也可以是一个场景。
比如一个玩家角色场景可能长这样:
|
|
这棵树的意思是:玩家本体负责移动,Sprite2D 负责显示角色图片,CollisionShape2D 负责碰撞,Camera2D 跟随玩家。
Godot 的思路就是:把游戏拆成很多可复用场景,再把场景组合成完整游戏。
第一个 2D 项目做什么
新手第一个项目不要做 RPG、开放世界、联机游戏或复杂平台跳跃。
建议做一个最小 2D 闪避游戏:
- 玩家可以上下左右移动。
- 敌人从屏幕边缘出现。
- 玩家碰到敌人就失败。
- 存活时间越长分数越高。
- 有开始按钮、失败界面和重新开始。
这个项目很小,但能覆盖 Godot 入门最重要的东西:
- 角色移动。
- 输入系统。
- 碰撞检测。
- 敌人生成。
- UI 显示。
- 定时器。
- 音效。
- 场景切换。
做完它,你就已经跨过了“只会看教程,不知道怎么组织项目”的第一道坎。
玩家移动怎么写
在 Godot 里,玩家角色通常用 CharacterBody2D。
给 Player 节点挂一个脚本:
|
|
这段代码做了几件事:
- 读取水平和垂直方向输入。
- 把方向向量归一化,避免斜向移动更快。
- 把方向乘以速度,得到
velocity。 - 用
move_and_slide()让角色移动并处理碰撞。
还需要在 Project Settings 里设置输入:
|
|
Godot 的输入系统建议一开始就用 action,不要在代码里直接写死键盘按键。这样以后支持手柄、触屏或改键会方便很多。
碰撞和物理怎么理解
Godot 的碰撞不是只靠图片大小判断,而是靠碰撞形状。
常用节点有:
CollisionShape2D:给角色或敌人定义碰撞范围。Area2D:检测进入、离开、重叠,适合触发器。CharacterBody2D:适合玩家和会移动的角色。RigidBody2D:适合受物理力影响的物体。StaticBody2D:适合墙、地面、固定障碍。
入门阶段记住一个原则:
如果你要自己控制角色移动,用 CharacterBody2D。
如果你只想检测“玩家碰到敌人”,敌人可以用 Area2D,再监听信号:
|
|
后面项目变复杂时,可以改成发送 game_over 信号,而不是直接重载场景。新手阶段先跑通逻辑更重要。
场景实例化:让敌人不断出现
Godot 的场景可以当成“预制体”使用。
假设你有一个 Enemy.tscn,可以在主场景里用脚本生成它:
|
|
再配合 Timer 节点,每隔一段时间调用一次 spawn_enemy(),敌人就会不断生成。
这就是 Godot 项目常见组织方式:
- 一个场景负责一种对象。
- 主场景负责调度和组合。
- 需要时动态实例化子场景。
UI 和分数
Godot 的 UI 使用 Control 系列节点。
常用节点包括:
CanvasLayer:让 UI 固定在屏幕上,不跟随相机移动。Label:显示文字。Button:按钮。Panel:面板背景。VBoxContainer/HBoxContainer:自动排版。
分数可以先用存活时间来做:
|
|
这样每秒增加 1 分。后面可以改成击败敌人、收集金币或完成关卡加分。
音效和反馈
小游戏好不好玩,很大一部分来自反馈。
即使画面很简单,也要加:
- 移动或点击音效。
- 碰撞音效。
- 得分音效。
- 失败音效。
- 屏幕震动或闪烁。
- 按钮 hover / pressed 状态。
Godot 里可以用 AudioStreamPlayer 播放音效:
|
|
新手常犯的错误是只做功能,不做反馈。功能能跑只是第一步,玩家能不能感到“我做了一个动作,游戏回应了我”,才是游戏体验的开始。
文件怎么组织
项目一开始就建议整理目录:
|
|
不要把所有资源都丢在根目录。小游戏阶段无所谓,项目稍微大一点就会混乱。
一个简单原则是:
- 场景放
scenes/。 - 脚本放
scripts/。 - 图片和音频放
assets/。 - UI 单独放
ui/。
Godot 新手常见坑
第一个坑:节点选错。
能自己控制移动的角色用 CharacterBody2D,不是随便用 Node2D。触发检测用 Area2D,固定障碍用 StaticBody2D。
第二个坑:忘记碰撞形状。
只有图片没有碰撞体,游戏不会知道它们撞上了。
第三个坑:把按键写死。
不要直接判断 KEY_A,用输入 action。
第四个坑:场景职责混乱。
不要让一个脚本同时管玩家、敌人、UI、音效和关卡。新手可以简单,但不要所有东西都堆在 Main.gd。
第五个坑:一开始就做大项目。
第一个项目越小越好。只要完整,有开始、有失败、有重新开始,就比半途而废的大项目更有价值。
推荐学习路线
可以按这个顺序学:
- 编辑器基本操作。
- 节点和场景。
- GDScript 基础。
- 输入系统。
- 2D 角色移动。
- 碰撞和 Area2D。
- Timer 和动态生成。
- UI 和分数。
- 音效和动画。
- 导出桌面或 Web 版本。
不要一开始就钻源码,也不要马上学渲染管线、Shader、多人联机、复杂 AI。先把一个小项目做完,很多概念自然会有位置。
Godot 和 Unity 怎么选
如果你主要做 2D 独立游戏、教学项目、个人原型,Godot 非常舒服。
如果你需要庞大的资产商店、成熟商业插件、移动广告和商业化 SDK、成熟团队经验,Unity 生态仍然更强。
如果你要做高规格 3D、复杂渲染、影视级画面,Unreal 更适合。
对新手来说,不要把选引擎变成拖延。Godot 足够你做出大量完整小游戏。你真正需要先学会的是:
- 游戏循环。
- 输入响应。
- 碰撞和反馈。
- 场景组织。
- 状态管理。
- 资源和版本管理。
这些能力换到其他引擎也能用。
第一个项目的完成标准
你可以用这个清单判断自己是否真的入门:
- 玩家能移动。
- 有敌人或障碍。
- 有碰撞失败。
- 有分数或目标。
- 有开始界面。
- 有失败界面。
- 能重新开始。
- 有至少两个音效。
- 有简单动画或视觉反馈。
- 能导出一个可运行版本。
做到这里,你就不是“打开过 Godot”,而是真的完成了一个游戏闭环。
总结
Godot 入门的关键,不是把所有功能看一遍,而是先理解它的组织方式:节点组成场景,场景组成游戏,脚本驱动行为,信号连接事件,资源通过目录管理。
第一个项目建议从 2D 小游戏开始。玩家移动、敌人生成、碰撞失败、UI 分数、音效反馈、重新开始,这几个环节跑通之后,再去学动画树、TileMap、存档、状态机、3D、Shader 和导出优化。
游戏开发不是先学完引擎再开始做,而是在做小项目的过程中反复补概念。Godot 的优势正好在这里:它足够轻,能让你很快从“想做游戏”走到“真的跑起来”。