本教程面向完全零基础的初学者,手把手带你从零开始学习 Godot 游戏引擎,最终完成一款可运行的小游戏。
目录
什么是 Godot?
Godot Engine 是一款免费、开源的 2D 和 3D 游戏引擎,采用 MIT 许可证发布。这意味着你可以完全免费使用它来开发商业游戏,无需支付任何版税。
为什么选择 Godot?
| 特点 | 说明 |
|---|---|
| 🆓 完全免费 | 开源(MIT 协议),无隐藏费用 |
| 📦 轻量级 | 完整安装仅约 100MB |
| 🔧 GDScript | 类 Python 的脚本语言,极易上手 |
| 🎮 2D + 3D | 同时支持 2D 和 3D 游戏开发 |
| 🌍 多平台导出 | 一键导出至 Windows、macOS、Linux、Android、iOS、Web 等 |
| 👥 活跃社区 | 丰富的文档、教程和第三方资源 |
GDScript 是什么?
GDScript 是 Godot 的官方脚本语言,语法非常类似 Python。如果你有 Python 基础,上手 GDScript 几乎零门槛。即使没有编程经验,GDScript 也是最友好的入门语言之一。
# 这是一段简单的 GDScript 代码示例
func _ready():
print("Hello, Godot!")
func _process(delta):
# 每帧都会执行的逻辑
if Input.is_action_pressed("ui_right"):
position.x += 200 * delta
安装与环境配置
第一步:下载 Godot
- 访问官网:godotengine.org/
- 点击 Download 按钮
- 选择 Standard version(标准版本,约 100MB)
- 根据你的操作系统下载对应版本:
- Windows:下载
.exe安装包 - macOS:下载
.zip或.dmg - Linux:下载 64-bit 版本
- Windows:下载
第二步:安装
Windows:
- 双击下载的安装包
- 选择安装路径(建议使用英文路径,如
D:\Godot) - 点击安装即可
macOS:
- 打开下载的
.dmg文件 - 将 Godot 拖入 Applications 文件夹
Linux:
- 解压下载的压缩包
- 运行其中的可执行文件
第三步:启动并创建项目
- 双击打开 Godot
- 首次启动会看到项目管理器窗口
- 点击右上角 「新建」 按钮
- 设置项目名称(如
my_first_game) - 选择项目保存路径
- 渲染器选择:
- 2D 项目选 Compatibility(兼容模式)
- 3D 项目或需要高级效果选 Forward+
- 点击 创建并编辑
🎉 恭喜!你已经成功创建了第一个 Godot 项目!
认识 Godot 编辑器界面
打开项目后,你会看到 Godot 的主编辑器界面。让我们认识各个区域:
┌─────────────────────────────────────────────────────┐
│ 工具栏 (Toolbar) │
├──────────┬──────────────────────┬───────────────────┤
│ │ │ │
│ 场景 │ 视图 (Viewport) │ 检查器 │
│ 树 │ (2D/3D 编辑区) │ (Inspector) │
│ (Scene) │ │ │
│ │ │ │
│ ├──────────────────────┤ │
│ │ 文件系统 │ │
│ │ (FileSystem) │ │
├──────────┴──────────────────────┴───────────────────┤
│ 输出 (Output) │
└─────────────────────────────────────────────────────┘
各区域功能说明
| 区域 | 功能 | 快捷操作 |
|---|---|---|
| 场景树 (Scene) | 显示当前场景中所有节点的层级关系 | 拖拽调整层级、双击定位 |
| 视图 (Viewport) | 可视化编辑区域,预览游戏画面 | F1-F5 切换不同视角模式 |
| 检查器 (Inspector) | 编辑选中节点的属性 | 直接修改数值、颜色等 |
| 文件系统 (FileSystem) | 管理项目中的所有文件 | 双击打开场景/脚本 |
| 输出 (Output) | 显示调试信息、错误提示 | 重要排错工具 |
常用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+S | 保存当前场景 |
Ctrl+D | 复制选中节点 |
Delete | 删除选中节点 |
F5 | 运行游戏 |
F6 | 运行当前场景 |
F11 | 全屏切换视图 |
Ctrl+Z | 撤销 |
Ctrl+Shift+Z | 重做 |
核心概念:节点与场景
理解**节点(Node)和场景(Scene)**是掌握 Godot 的关键!
节点(Node)
节点是 Godot 中最基本的构建单元。一切皆节点——角色、地图、相机、声音、UI 按钮……都是节点。
Godot 提供了丰富的内置节点类型:
| 节点类型 | 用途 | 常见子类 |
|---|---|---|
Node2D | 2D 空间中的节点基类 | Sprite, AnimatedSprite2D |
CharacterBody2D | 角色物理体 | 玩家角色、NPC |
RigidBody2D | 受物理影响的物体 | 石头、箱子、子弹 |
Area2D | 检测区域 | 触发器、伤害范围 |
Camera2D | 相机跟随 | 视角控制 |
Control | UI 控件基类 | Button, Label, Panel |
AudioStreamPlayer2D | 2D 音效播放 | 音效、BGM |
场景(Scene)
场景是由一组节点组成的、可复用的组件。可以把场景理解为:
场景 = 一个完整的"零件",可以独立存在,也可以被其他场景引用
例如:
player.tscn—— 玩家角色场景enemy.tscn—— 敌人场景coin.tscn—— 金币场景main.tscn—— 主场景(组装所有零件)
场景树(Scene Tree)
当游戏运行时,所有场景实例化为节点,组成一棵场景树:
Main (根节点)
├── Player (玩家)
│ ├── Sprite (外观)
│ ├── CollisionShape2D (碰撞体)
│ └── Camera2D (相机)
├── TileMap (地图)
├── UI (界面)
│ ├── ScoreLabel (分数显示)
│ └── HealthBar (血条)
└── BGM (背景音乐)
第一个项目:角色移动
让我们动手做一个最基础但完整的功能——用键盘控制角色在屏幕上移动!
步骤 1:创建玩家场景
- 在场景树中点击 "+" 添加根节点
- 搜索并选择 CharacterBody2D
- 将其重命名为
Player - 按
Ctrl+S保存场景为player.tscn
步骤 2:添加外观
- 右键点击 Player 节点 → 添加子节点
- 添加 Sprite2D 节点
- 在 Inspector 中找到 Texture 属性
- 点击下拉菜单 → 新建 Sprite2D → 新建 RectangleTexture2D(先用矩形代替图片)
- 设置 Size 为
(32, 32),Color 为你喜欢的颜色
💡 提示:你也可以直接拖拽一张 PNG 图片到 FileSystem 面板,然后将其指定给 Sprite2D 的 Texture 属性。
步骤 3:添加碰撞体
- 右键 Player → 添加子节点
- 添加 CollisionShape2D
- 在 Inspector 中找到 Shape 属性
- 选择 新建 RectangleShape2D
- 调整 Size 为
(32, 32)(与外观一致)
步骤 4:编写移动脚本
- 选中 Player 节点
- 在 Inspector 右侧点击 **「附加脚本」**按钮(脚本图标)
- 保持默认设置,点击 创建
将以下代码写入脚本:
extends CharacterBody2D
# 移动速度(每秒像素数)
@export var speed: float = 200.0
# 重力(用于跳跃)
@export var jump_force: float = -400.0
# 重力加速度
const GRAVITY = 980.0
func _physics_process(delta):
# 应用重力
velocity.y += GRAVITY * delta
# 获取水平输入
var direction = 0
if Input.is_action_pressed("ui_left"):
direction -= 1
if Input.is_action_pressed("ui_right"):
direction += 1
# 应用水平速度
velocity.x = direction * speed
# 跳跃检测
if is_on_floor() and Input.is_action_just_pressed("ui_up"):
velocity.y = jump_force
# 移动角色
move_and_slide()
# 翻转角色朝向
if direction != 0:
$Sprite2D.flip_h = direction < 0
步骤 5:测试运行
按 F5 键运行游戏!你应该能用方向键左右移动角色,按上键跳跃。
如果角色掉出屏幕,那是因为我们还没加地面——接下来就来做!
添加物理与碰撞
创建地面
- 回到主场景(
main.tscn),确保根节点是 Node2D 或 Node - 添加 StaticBody2D 节点,命名为
Ground - 为 Ground 添加子节点 CollisionShape2D
- Shape 设为 RectangleShape2D,Size 设为
(960, 100) - Position 设为
(480, 550)(屏幕底部居中)
为了让地面可见,可以再添加一个 ColorRect 或 Sprite2D 作为视觉表示。
创建平台
重复上述步骤,创建几个浮空的 StaticBody2D 作为平台,让角色可以跳上去。
测试
再次按 F5 运行,现在角色应该能站在地面上,并且可以在平台之间跳跃了!
UI 界面制作
游戏怎么能没有 UI?让我们添加分数显示和生命值。
添加分数标签
- 在主场景中添加 CanvasLayer 节点(用于 UI 层级管理)
- 在 CanvasLayer 下添加 Control 节点,命名为
UI - 在 UI 下添加 Label 节点,命名为
ScoreLabel - 在 Inspector 中设置:
- Text:
"分数: 0" - Position:
(10, 10) - 字体大小可以通过 Theme 自定义
- Text:
添加血条
- 在 UI 下添加 ProgressBar 节点,命名为
HealthBar - 设置 Position 为
(10, 50) - 设置 Size 为
(200, 20) - 设置 Max Value 为
100,Value 为100
用脚本更新 UI
在主场景的脚本中连接 UI 更新逻辑:
extends Node2D
@onready var score_label: Label = $UI/ScoreLabel
@onready var health_bar: ProgressBar = $UI/HealthBar
var score: int = 0
var health: int = 100
func add_score(points: int):
score += points
score_label.text = "分数: " + str(score)
func take_damage(damage: int):
health -= damage
health_bar.value = max(0, health)
if health <= 0:
game_over()
func game_over():
get_tree().reload_current_scene() # 重新开始
音效与背景音乐
没有声音的游戏是没有灵魂的!Godot 让添加音频变得非常简单。
准备音频文件
支持格式:.wav, .mp3, .ogg
推荐使用 .ogg 格式(体积小,质量好)。
添加背景音乐
- 在主场景中添加 AudioStreamPlayer 节点,命名为
BGM - 在 Inspector 的 Stream 属性中选择你的音乐文件
- 设置 Volume Db(-10 到 0 之间比较合适)
- 勾选 Autoplay(自动播放)
添加音效
- 在 Player 节点下添加 AudioStreamPlayer 节点,命名为
JumpSound - 指定跳跃音效文件
- 在跳跃代码中触发播放:
if is_on_floor() and Input.is_action_just_pressed("ui_up"):
velocity.y = jump_force
$JumpSound.play() # 播放跳跃音效
收集免费音效资源
- Freesound.org — 免费音效库
- Kenney.nl — 免费游戏素材(含音效)
- OpenGameArt.org — 开源游戏艺术资源
打包发布游戏
游戏做好了,怎么分享给朋友?Godot 支持一键导出到多个平台!
导出设置
- 点击顶部菜单 项目 → 导出...
- 点击 添加... 选择目标平台:
- Windows: 选 Windows Desktop
- macOS: 选 macOS
- Web: 选 Web(可在浏览器中运行!)
- 选择后会要求填写调试密钥(首次使用时 Godot 会自动生成)
导出 Windows 版本
- 在导出面板中选择 Windows Desktop
- 设置 导出路径(如
export/my_game.exe) - 点击 导出项目 按钮
- 等待完成,去文件夹找到 exe 文件就能运行了!
导出 Web 版本(超酷!)
- 添加 Web 导出模板
- 点击 导出项目
- Godot 会生成一个包含 HTML 文件的文件夹
- 你可以将它部署到 GitHub Pages 或任何静态网站托管服务
- 分享链接,朋友可以直接在浏览器里玩你的游戏!
⚠️ 注意:首次导出某平台时,需要在 管理导出模板 中下载对应的导出模板。
学习资源推荐
官方资源
| 资源 | 链接 | 说明 |
|---|---|---|
| 📖 官方文档 | docs.godotengine.org | 最权威的参考手册 |
| 🎬 官方演示 | YouTube "Godot Official" | 官方出的教程视频 |
| 💬 官方 Discord | discord.gg/godotengine | 全球开发者社区 |
中文资源
| 资源 | 链接 | 说明 |
|---|---|---|
| 🇨🇳 中文文档 | docs.godotengine.org/zh_CN | 官方中文翻译版 |
| 📺 B站教程 | 搜索 "Godot 教程" | 大量优质中文视频教程 |
| 📱 微信公众号 | 搜索 "Godot" | 多个中文社区公众号 |
推荐学习路线
第1周:熟悉界面 + GDScript 基础语法
↓
第2周:完成 2D 平台跳跃游戏原型
↓
第3周:学习粒子效果、动画、Tween 动画
↓
第4周:完善游戏(UI、音效、存档、关卡切换)
↓
第5周:打包发布 + 尝试 3D 基础
↓
持续进阶:着色器(Shader)、网络多人、自定义插件...
总结
恭喜你完成了 Godot 零基础入门教程!回顾一下我们学到的内容:
✅ Godot 引擎的安装与项目创建
✅ 编辑器界面的各个区域
✅ 节点与场景的核心概念
✅ 角色移动与物理碰撞
✅ UI 界面制作
✅ 音效与背景音乐
✅ 打包发布到多平台
记住:最好的学习方法就是动手做!不要只是看教程,一定要跟着一步步敲代码、做项目。遇到问题不要怕——查阅官方文档、搜索社区问答、在论坛提问,这些都是成长的过程。
🎮 现在,去创造属于你的游戏世界吧!
本文基于 Godot 4.x 版本编写,部分 API 可能与 3.x 有所不同。如有疑问,请以官方最新文档为准。
作者原创,转载请注明出处。