- 删除 引擎学习开发计划.csv - 更新为最新的 引擎学习开发计划.xlsx - README 与计划文档中的引用同步改为 xlsx Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
17 KiB
17 KiB
用 Rust 从零构建 2D 游戏引擎 —— 完整学习与开发计划
适用对象:零编程经验、零引擎经验的初学者 目标:① 系统巩固游戏引擎知识 → ② 亲手造一个能用的 2D 引擎 → ③ 用它做一款小游戏 时间:不设硬性期限,以"真正学会"为准
一、先读这段(最重要的认知)
-
没有"一条龙"中文教程。 没有任何单一教程能带你"从零用 Rust 写完整 2D 引擎"。这件事的本质是拼装:Rust 语言、数学、图形学、各个引擎子系统,分别有各自的好教程,你要把它们组装起来。本计划就是这张"组装说明书"。
-
引擎理论是跨语言的。 著名的 The Cherno 游戏引擎系列(B站有中文字幕/配音搬运)虽然用 C++,但它讲的架构思想(事件系统、渲染抽象层、ECS、编辑器)是通用的。看它学"为什么这么设计",回到 Rust 自己实现。
-
不要一上来就造引擎。 正确顺序是:先学会 Rust → 用现成简单库(macroquad)做几个小游戏,理解"游戏循环/精灵/输入"是什么感觉 → 再学 wgpu 自己写渲染器 → 再逐个搭建引擎系统。先会用,再会造。
-
教程标记含义:
- ✅ 有直接中文教程 —— 跟着做即可
- 🔧 有教程需改写 —— 教程是英文或别的语言(如 C++),思想通用,需自己翻译成 Rust
- ⚠️ 无现成教程 —— 需查文档+参考开源引擎源码自己实现(这是最能巩固知识的环节)
二、阶段总览(路线图)
| 阶段 | 名称 | 核心目标 | 大致占比 |
|---|---|---|---|
| 阶段 0 | 地基:语言 + 数学 + 图形学认知 | 能读会写 Rust,懂向量矩阵,懂图形学基本概念 | 最大头 |
| 阶段 1 | 工具链与环境 | 搭好开发环境,理解 Cargo 生态 | 小 |
| 阶段 2 | 窗口与渲染入门 | 开窗口、画出第一个三角形/精灵 | 中 |
| 阶段 3 | 自己的 2D 渲染器 | 精灵、纹理、批处理、摄像机、文字 | 大 |
| 阶段 4 | 引擎核心架构 | 游戏循环、ECS、事件、资源、日志 | 大 |
| 阶段 5 | 引擎子系统 | 输入、音频、物理/碰撞、动画、粒子、场景 | 大 |
| 阶段 6 | 编辑器与工具链 | egui 编辑器、序列化、热重载 | 中 |
| 阶段 7 | 用引擎做一款游戏 | 完整小游戏 + 跨平台打包发布 | 中 |
阶段 0 —— 地基(语言 / 数学 / 图形学认知)
这是零基础玩家最容易想跳过、但绝对不能跳过的部分。地基不牢,后面寸步难行。
0.1 编程与 Rust 语言入门 ✅
- 任务:掌握变量、控制流、函数、所有权(ownership)、借用、生命周期、结构体、枚举、trait、泛型、错误处理、模块、Cargo。
- 中文教程:
- 《Rust 程序设计语言》简体中文版(官方书翻译,权威):https://kaisery.github.io/trpl-zh-cn/
- 《Rust 语言圣经》(讲解最细、最贴近实战):https://course.rs/ ,配套练习:https://practice.course.rs/
- 产出:能独立写出带结构体/枚举/trait 的小程序(如命令行计算器、待办清单)。
0.2 数据结构与基本算法 ✅/🔧
- 任务:数组/动态数组、哈希表、栈、队列、树;时间复杂度概念。引擎里到处是它们。
- 资源:《Rust 语言圣经》中"手把手实现链表"章节;其余概念可看任意中文数据结构课程(B站搜"数据结构 基础"),思想通用。
- 产出:理解"为什么 ECS 用连续数组存组件会更快"。
0.3 游戏数学:线性代数 ✅
- 任务:向量(加减、点乘、叉乘、归一化)、矩阵(变换、平移/旋转/缩放)、坐标系、正交投影。2D 引擎几乎只需要这些。
- 中文教程:
- GAMES101 现代计算机图形学入门(闫令琪) 前几讲专门复习线性代数与变换,强烈推荐:https://www.bilibili.com/video/BV1X7411F744/
- 配套笔记很多(知乎搜 "GAMES101 笔记")。
- 产出:能手算"把一个点旋转 30° 再平移"对应的矩阵。
0.4 计算机图形学基础认知 ✅
- 任务:理解光栅化、像素、帧缓冲、颜色、什么是 GPU/着色器、渲染管线大致流程。只需 2D 相关部分,光线追踪/动画那几讲可略读。
- 中文教程:GAMES101(同上),重点看"光栅化""变换"部分。
- 产出:能说清"一张图片是怎么显示到屏幕上的"。
0.5 游戏引擎宏观认知 + 设计模式 🔧
- 任务:建立"引擎由哪些系统组成"的整体地图;学常见游戏编程模式(游戏循环、状态机、观察者、对象池、组件模式等)。
- 资源:
- 《游戏编程模式》中文版(免费在线,必读):https://gpp.tkchu.me/ 或镜像 https://github.com/tkchu/Game-Programming-Patterns-CN
- The Cherno 游戏引擎系列(B站中文字幕)第 1 集"系列介绍"先建立全局观:https://www.bilibili.com/video/BV14v411h7Hu/
- (进阶参考书)《游戏引擎架构》(Jason Gregory) 有中文纸质版,可作长期工具书,不必现在读完。
- 产出:能画出一张"我的引擎要有哪些模块"的草图。
0.6 Git 版本控制 ✅
- 任务:init / add / commit / branch / merge / 远程仓库,会用 GitHub。
- 中文教程:廖雪峰《Git 教程》:https://liaoxuefeng.com/books/git/introduction/index.html
- 产出:把你的引擎项目托管到 GitHub,养成提交习惯。
阶段 1 —— 工具链与开发环境
1.1 安装 Rust 工具链 ✅
- 任务:用
rustup安装 Rust,理解cargo(构建/依赖/运行/测试一体)。 - 教程:TRPL 中文版"入门指南":https://kaisery.github.io/trpl-zh-cn/ch01-00-getting-started.html
- 产出:
cargo new、cargo run跑通 Hello World。
1.2 编辑器/IDE 配置 ✅
- 任务:VS Code +
rust-analyzer插件(自动补全、报错、跳转);会用调试器。 - 教程:B站搜 "VS Code Rust 开发环境配置",或 rust-analyzer 官网。
- 产出:写代码有智能提示和实时报错。
1.3 理解 crate 生态 ✅
- 任务:会查 https://crates.io 和 https://docs.rs ;理解后面要用的关键库定位:
winit(窗口)、wgpu(图形)、glam(数学)、image(图片加载)、rodio/kira(音频)、egui(GUI)、serde(序列化)、hecs/bevy_ecs(ECS,可选)。
- 产出:能自己在 docs.rs 查一个库怎么用。
阶段 2 —— 窗口与渲染入门(先会用,建立手感)
2.A 用现成简单库做手感(强烈建议先做)✅/🔧
- 任务:用 macroquad(极简 2D 库)做 1~2 个小游戏(贪吃蛇、打砖块),亲身体会"游戏循环、画精灵、读输入、播音效"。这一步让你知道引擎最终要给用户提供什么样的体验。
- 教程:
- 官方书《Game Development in Rust with Macroquad》(英文,但代码极短易懂):https://mq.agical.se/
- macroquad 仓库示例:https://github.com/not-fl3/macroquad
- 中文较少,B站搜 "macroquad" / "Rust 游戏" 有零星视频。
- 产出:一个能玩的贪吃蛇。做完你会对"引擎该有什么"豁然开朗。
2.B 开始造引擎:窗口 + GPU 初始化 ✅
- 任务:用
winit创建窗口、处理窗口事件(关闭、缩放);用wgpu初始化 GPU、画出第一个三角形。 - 中文教程:
- 《学习 wgpu》中文版(核心教程,从开窗到三角形手把手):https://jinleili.github.io/learn-wgpu-zh/
- 英文原版(更新更快):https://sotrh.github.io/learn-wgpu/
- 产出:自己的窗口里出现一个彩色三角形。
阶段 3 —— 构建自己的 2D 渲染器
跟着《学习 wgpu》中文版逐章推进,同时把通用代码抽象成"你引擎的渲染模块"。
3.1 渲染管线 / 着色器 / 顶点缓冲 ✅
- 教程:《学习 wgpu》中文版 "管线 / 缓冲区 / 纹理" 各章。
- 产出:理解 WGSL 着色器、顶点/索引缓冲。
3.2 纹理加载与精灵(Sprite)渲染 ✅
- 任务:用
image库加载 PNG,渲染成带贴图的四边形(Quad)。 - 教程:《学习 wgpu》中文版 "纹理与绑定组" 章节。
- 产出:屏幕上显示一张图片。
3.3 摄像机与正交投影 ✅
- 任务:实现 2D 正交摄像机(平移、缩放),世界坐标↔屏幕坐标。
- 教程:《学习 wgpu》中文版 "Uniform 缓冲与摄像机" 章节(其相机虽是3D,2D 把它简化为正交即可)。
- 数学依赖:阶段 0.3 的投影矩阵。
- 产出:能移动/缩放视角看场景。
3.4 批处理渲染(Batch Rendering)⚠️/🔧
- 任务:把成百上千个精灵合并成少量 draw call,这是 2D 引擎性能关键。
- 资源:The Cherno 有专门的 "2D Batch Rendering" 系列(C++,思想直接照搬到 wgpu):B站搜 "Cherno 批处理 / Batch"。
- 产出:能流畅画上千个精灵。
3.5 文本渲染 🔧
- 任务:渲染文字(字体图集/SDF)。可用
glyphon/wgpu_text等库,或自己做位图字体。 - 资源:相关库的英文 README + 示例;位图字体原理 B站可搜。
- 产出:屏幕上显示分数、调试信息。
阶段 4 —— 引擎核心架构
4.1 游戏主循环(固定时间步长)🔧
- 任务:实现
update/render分离、固定时间步(fixed timestep)让物理稳定、帧率无关。 - 资源:《游戏编程模式》"游戏循环"一章(中文,必读):https://gpp.tkchu.me/game-loop.html
- 产出:物理在不同帧率下表现一致。
4.2 数学库集成 ✅
- 任务:引入
glam(向量/矩阵/四元数高性能库),统一引擎数学类型。 - 资源:glam docs.rs;概念已在阶段 0.3 掌握。
- 产出:引擎里有统一的
Vec2 / Mat3等类型。
4.3 日志系统 ✅
- 任务:用
log+env_logger或tracing做分级日志。 - 资源:库 README;The Cherno 也有 "Logging" 一集讲设计思路。
- 产出:能打印分级调试信息。
4.4 事件系统 🔧
- 任务:窗口/输入/自定义事件的分发机制(观察者模式)。
- 资源:The Cherno "Event System" 系列(C++,思想通用);《游戏编程模式》观察者/事件队列章节(中文)。
- 产出:输入和窗口事件能被各系统订阅处理。
4.5 ECS(实体-组件-系统)架构 ✅/⚠️
- 任务:理解并使用 ECS 组织游戏对象。两条路线选一:
- (推荐先用现成) 集成
hecs或bevy_ecs,先学会用。 - (进阶自造) 自己实现一个简易 ECS,彻底搞懂原理(最巩固知识,但难)。
- (推荐先用现成) 集成
- 中文资源:
- Bevy 中文教程理解 ECS 思想:https://bevy-cheatbook.github.io 的中文版 https://yiviv.com/bevy-cheatbook/ ;ECS 入门:https://bevyengine-cn.github.io/learn/book_cn/getting-started/ecs/
- 《游戏编程模式》"组件模式"一章(中文)。
- 产出:能用 ECS 创建实体、挂组件、写系统遍历。
4.6 资源管理(Asset Manager)⚠️
- 任务:统一加载/缓存纹理、音频、字体,用句柄(handle)引用,避免重复加载。
- 资源:参考 Bevy 的 Assets 设计(看文档/源码);无直接中文教程,需自己设计。
- 产出:
assets.load::<Texture>("player.png")这样的接口。
阶段 5 —— 引擎子系统
5.1 输入系统 🔧
- 任务:封装键盘、鼠标、手柄(
gilrs)状态,提供"本帧是否按下/持续按住"查询和按键映射(Action)。 - 资源:winit 输入事件文档;手柄用
gilrsREADME。 - 产出:
input.is_pressed(Key::Space)接口。
5.2 音频系统 ✅/🔧
- 任务:播放音效与背景音乐、音量控制。用
kira(游戏向,推荐)或rodio。 - 资源:库 README/示例;B站可搜 "Rust 音频 rodio"。
- 产出:游戏里能放音效和 BGM。
5.3 2D 物理与碰撞检测 🔧⚠️
- 任务:AABB 碰撞检测、圆形碰撞、碰撞响应;两条路线:
- 入门:自己实现 AABB/圆碰撞(最巩固知识)。
- 进阶:集成
rapier2d(成熟 2D 物理引擎)。
- 资源:
- 碰撞检测原理 B站搜 "2D 碰撞检测 AABB / 分离轴定理 SAT"。
- 自写物理引擎经典系列(英文):Randy Gaul 的 2D 物理教程,可配合翻译阅读。
rapier2d官方文档与中文社区文章。
- 产出:角色能站在平台上、被墙挡住。
5.4 精灵动画系统 ⚠️
- 任务:序列帧动画、精灵图集(atlas)切割、动画状态机。
- 资源:无完整中文教程;状态机参考《游戏编程模式》"状态"一章(中文)。
- 产出:角色能播放走/跳/待机动画。
5.5 粒子系统 🔧
- 任务:发射器、粒子生命周期、批量渲染粒子(复用 3.4 批处理)。
- 资源:The Cherno 有 "Particle System" 一集(C++,思想通用)。
- 产出:爆炸/火焰等特效。
5.6 场景管理与序列化 ✅/⚠️
- 任务:场景(Scene)概念、实体的保存/加载,用
serde+ron/json序列化。 - 资源:
serde中文文章较多(B站/掘金搜 "Rust serde");场景设计需自己规划。 - 产出:能把一个关卡存成文件再读回来。
5.7 游戏内 UI 系统 ✅
- 任务:按钮、文本、血条等。推荐集成 egui(即时模式 GUI,对接 wgpu 成熟)。
- 资源:egui 官方示例 + B站搜 "Rust egui 教程";在线 demo 直观。
- 产出:主菜单、暂停界面、HUD。
阶段 6 —— 编辑器与工具链
引擎区别于"一堆库"的关键,就是有可视化工具。这一阶段会让你的引擎"专业感"质变。
6.1 集成 egui 编辑器面板 ✅
- 任务:用 egui 做实体列表、属性面板(Inspector)、场景视图。
- 资源:egui 文档 + The Cherno "Editor" 系列建立设计观(C++)。
- 产出:能在编辑器里选中实体、改它的位置/属性。
6.2 资源热重载(Hot Reload)⚠️
- 任务:监听文件变化(
notify库),改了图片/配置自动生效。 - 资源:
notify库 README;无直接中文教程,自行实现。 - 产出:改图不用重启程序。
6.3 关卡/地图编辑 ⚠️/🔧
- 任务:自做简易关卡编辑器,或对接 Tiled 地图编辑器(
tiled库读取.tmx)。 - 资源:Tiled 官方(有中文界面);
tiledrust 库 README。 - 产出:能用编辑器拼一张关卡地图。
阶段 7 —— 用你的引擎做一款游戏
7.1 选题与游戏设计 ✅
- 任务:选一个小而完整的题材(平台跳跃 / 俯视角射击 / 塔防)。写一页纸设计文档。
- 资源:游戏设计入门看 B站/indienova 独立游戏社区文章。
- 产出:一份明确范围的设计文档(切忌做大)。
7.2 用引擎实现完整游戏循环 ⚠️
- 任务:把前面所有系统串起来:菜单→关卡→玩法→结算→存档。在做的过程中反过来补全引擎缺失功能。
- 产出:一个从头玩到尾的完整小游戏。
7.3 打磨与优化 🔧
- 任务:性能分析、内存优化、手感调优(juice:震屏、音效反馈)。
- 资源:The Cherno / GDC 演讲 "Juice it or lose it"(B站有搬运)。
- 产出:手感舒服、不卡顿。
7.4 跨平台打包与发布 ✅/🔧
- 任务:Windows/Linux/Mac 打包,资源随程序分发;可选 WebAssembly 上网页(
wasm)。 - 资源:
cargo build --release;wgpu/winit 对 WASM 支持的文档(《学习 wgpu》中文版有 Web 章节)。 - 产出:把游戏发给朋友能直接玩,或发布到 itch.io。
三、贯穿全程的好习惯
- 每个阶段都写小 demo 验证,别憋大招。能跑起来的丑东西,胜过完美的设想。
- 多读开源引擎源码当字典:
Bevy(最大最现代)、ggez(小而经典 2D)、macroquad(极简)。遇到不会的就去翻它们怎么写。 - 理论卡住时回到 GAMES101 和《游戏编程模式》,它们能解答"为什么"。
- The Cherno 系列用来学架构思想(C++→Rust 转换是很好的锻炼)。
- 坚持用 Git 提交,给自己留回溯点。
四、核心中文资源清单(收藏夹)
| 用途 | 资源 | 链接 |
|---|---|---|
| Rust 官方书中文 | Rust 程序设计语言 简体中文版 | https://kaisery.github.io/trpl-zh-cn/ |
| Rust 实战教程 | Rust 语言圣经 | https://course.rs/ |
| Rust 在线练习 | Rust 语言圣经练习 | https://practice.course.rs/ |
| 图形学/数学 | GAMES101(闫令琪,B站) | https://www.bilibili.com/video/BV1X7411F744/ |
| 引擎架构思想 | The Cherno 游戏引擎系列(B站中字) | https://www.bilibili.com/video/BV14v411h7Hu/ |
| 设计模式 | 游戏编程模式 中文版 | https://gpp.tkchu.me/ |
| GPU/渲染 | 学习 wgpu 中文版 | https://jinleili.github.io/learn-wgpu-zh/ |
| 2D 入门库 | Macroquad(书+示例,英文) | https://mq.agical.se/ |
| ECS 思想 | Bevy Cheatbook 中文 | https://yiviv.com/bevy-cheatbook/ |
| Git | 廖雪峰 Git 教程 | https://liaoxuefeng.com/books/git/introduction/index.html |
详细逐条任务见同目录下的 引擎学习开发计划.xlsx(可当进度看板用)。
祝你造引擎愉快。记住:第一个引擎一定会很烂,这很正常——它的价值不是"好用",而是让你真正理解了引擎是怎么回事。