Godot 4.7 · 中文 · 免费 · 边学边玩
从零做出能玩的游戏
Godot 4.7 互动教程
每一章都配有能在浏览器里直接运行的 Godot 示例。拖动滑块就能改游戏里的参数,马上看到效果,看懂原理之后再下载完整工程,用 Godot 打开接着做。
先讲原理,再写代码每个知识点先讲清楚原理,用可以拖动的交互图演示,再落到 GDScript 代码上。
在浏览器里跑真游戏示例都是用 Godot 4.7.2 导出的 Web 版,不用安装任何东西就能玩。
边调参数边看效果重力、速度、生成频率这些参数都能在线调整,游戏马上响应。
工程可以下载每个示例都能下载完整工程,用 Godot 4.7 直接打开,调好的参数也会一起带上。
示例游戏
点进去可以试玩、调参数、看全部源码、下载工程。
入门示例:太阳系 · 信号 · 生命周期
三个小场景:用太阳系看父子变换,用信号实验室看谁连接了谁,用生命周期日志看回调顺序。
平台跳跃
一个完整的平台跳跃关卡:可调的跳跃手感、角色动画与果汁感、TileMapLayer 地形、会跟随和震动的相机、移动平台、敌人和检查点。
俯视角 RPG
一小块塞尔达风格的地图:TileMapLayer 多层地图和 Y 排序、数据驱动的 NPC 对话与任务、状态机敌人 AI、Hitbox/Hurtbox 战斗、背包和存档。
三消
点选或滑动交换宝石:匹配扫描、L/T 形合并、重力压缩、连锁循环和 Tween 动画,逻辑层可以单独测试。
太空射击
纵版弹幕射击:对象池、碰撞层与遮罩、Path2D 编队、环形/螺旋/自机狙弹幕、粒子,以及完整的标题—暂停—结算流程和程序化音效。
第一人称射击
Compatibility 渲染器下的小型 FPS:第一人称控制器、射线武器、运行时烘焙导航网格的追击敌人。
课程目录
建议按顺序学。如果你已经会 Godot 3 或其他引擎,可以从实战部分开始。
第一部分 · 入门
- 认识 Godot 4.7Godot 是什么、该下载哪个版本、三种渲染器怎么选;认识项目管理器和编辑器的各个区域,弄清工程文件夹里每个文件的用途,做出第一个场景。最后介绍本教程的用法:在网页上运行示例、拖滑块改参数、下载工程。
- 节点与场景Godot 的一切都是节点,节点组成树,树可以存成场景再反复实例化。本章讲场景树、实例化、组合、三大节点家族、get_node 路径、owner、分组和唯一名称。
- GDScript 速成用一章的篇幅把 GDScript 过一遍:静态类型和 := 推断、函数、控制流和 match、数组和字典、@export/@onready、setter、类和内部类、static、lambda、await,最后用可以单步执行的时间轴弄清楚 _init、_enter_tree、_ready、_process、_physics_process、_exit_tree 的先后顺序。
- 信号与节点通信信号是节点之间"我发生了某事"的广播。本章讲内置信号和自定义信号、connect 的各种写法、一次性连接、"向下调用、向上发信号"的原则、事件总线,以及用 await 等待一个信号。
- 向量、坐标与变换位置、速度、朝向都是向量;一个节点"在哪、朝哪、多大"合起来是一个 Transform2D。本章讲清 Vector2 的常用运算、本地坐标和全局坐标的换算,以及父子节点的变换是怎么一层层叠加的。
第二部分 · 2D 基础
- 角色移动与跳跃手感用 CharacterBody2D 写一个手感好的平台跳跃角色:加速度和摩擦、由跳跃高度反推重力、下落加速、可变跳跃高度、土狼时间和跳跃缓冲。
- 动画、补间与手感同样的移动参数,加上角色动画、Tween 补间、挤压拉伸、粒子、屏幕震动和命中停顿之后,游戏的"手感"会完全不同。本章讲清楚每种效果的原理和写法,并且都可以单独开关对比。
- TileMapLayer、相机与关卡用 TileSet 配置瓦片的碰撞、地形自动连接和自定义数据,用多个 TileMapLayer 搭关卡;再让 Camera2D 平滑跟随、限制边界、留出死区和前瞻,最后加上 Parallax2D 视差背景、移动平台、敌人和检查点,并初步认识碰撞层。
第三部分 · 2D 实战
- RPG(上):地图、移动与对话做一小块塞尔达风格的俯视角地图:用 Input.get_vector 做八方向移动并弄清斜向归一化,用 TileSet 和三层 TileMapLayer 搭地图,用 Y 排序让角色走到树后面,再用 Camera2D、Area2D 交互检测和自定义 Resource 做一套数据驱动的对话系统,最后用 autoload 保存全局状态。
- RPG(下):战斗、状态机与存档给俯视角 RPG 加上战斗:用两种写法实现有限状态机(enum + match 和"节点即状态")并比较优缺点,做敌人的感知、追击和丢失目标,用 Hitbox/Hurtbox 模式和规划好的碰撞层做攻击判定,加上击退和无敌帧;再做背包和 ItemData 资源,讲清共享资源的 duplicate 陷阱,最后用 JSON 存档并比较 ResourceSaver,实测 Web 上的 user://。
- 三消(上):网格、交换与匹配算法把棋盘拆成"纯数据的 Board"和"只管显示的 Gem",然后依次实现网格与像素坐标的换算、点击和拖动交换、匹配扫描、L/T 形合并、开局不带三连的生成方法和可行步检测。
- 三消(下):下落、连锁与动画消除之后的流程:双指针重力压缩、补充新宝石、用 await 把"交换 → 检测 → 消除 → 下落"串成连锁循环;Tween 的并行动画和 await finished、特殊宝石的链式触发、死局洗牌、计分倍数和星级评价。
- 太空射击:对象池、碰撞层与粒子做一个纵版弹幕射击游戏。用对象池对付成百上千颗子弹,用 Area2D 和命名的碰撞层/遮罩安排"谁检测谁",用 Path2D 让敌人排队飞行,用极坐标写出环形、螺旋、自机狙弹幕,用数据资源描述波次,最后用 GPUParticles2D 和发光做出霓虹爆炸。
- UI、音频与游戏流程给太空射击加上"游戏外壳":用 Control、锚点和容器搭界面,用 Theme 和主题变体统一风格,让键盘和手柄都能操作菜单;用自动加载管理标题、游戏、暂停、结算几个状态,用 get_tree().paused 和 process_mode 实现暂停;建立音频总线和效果器,用 Python 程序化生成音效,处理 Web 上的自动播放限制,最后把最高分存进 user://。
第四部分 · 3D 实战
- 3D 基础:空间、相机、光照与材质从 2D 跨到 3D 要补的几块基础:右手坐标系和 -Z 前方、Transform3D 与 Basis、欧拉角和四元数、相机投影、光源和阴影、PBR 材质、WorldEnvironment,以及 Compatibility 渲染器在 3D 上能做什么、不能做什么。
- FPS(上):第一人称控制器用 CharacterBody3D 写一个完整的第一人称控制器:身体和头分开转、鼠标视角与 Web 上的鼠标锁定、加速度和摩擦、跳跃和重力、蹲下与头顶检测、镜头晃动、冲刺 FOV,以及帧率无关的平滑插值。
- FPS(下):武器、敌人与导航给控制器装上武器:两种射线检测、碰撞层规划、后坐力和散布、弹孔与命中反馈;再做会看、会追、会开枪的敌人:视线检测、状态机、运行时烘焙导航网格、NavigationAgent3D 寻路与避障,最后用 HUD 把信息告诉玩家。