2DGameEngineByRust/docs/引擎学习开发计划.md
cc f4a83304c8 docs: 文档迁移至 docs/ 目录,使用 xlsx 任务清单
- README、计划文档、xlsx 统一移入 docs/
- 移除中间产物 csv,以更新后的 xlsx 为准

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:48:14 +08:00

307 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 用 Rust 从零构建 2D 游戏引擎 —— 完整学习与开发计划
> 适用对象:**零编程经验、零引擎经验**的初学者
> 目标:① 系统巩固游戏引擎知识 → ② 亲手造一个能用的 2D 引擎 → ③ 用它做一款小游戏
> 时间:不设硬性期限,以"真正学会"为准
---
## 一、先读这段(最重要的认知)
1. **没有"一条龙"中文教程。** 没有任何单一教程能带你"从零用 Rust 写完整 2D 引擎"。这件事的本质是**拼装**Rust 语言、数学、图形学、各个引擎子系统,分别有各自的好教程,你要把它们组装起来。本计划就是这张"组装说明书"。
2. **引擎理论是跨语言的。** 著名的 **The Cherno 游戏引擎系列**B站有中文字幕/配音搬运)虽然用 C++,但它讲的**架构思想**事件系统、渲染抽象层、ECS、编辑器是通用的。看它学"为什么这么设计",回到 Rust 自己实现。
3. **不要一上来就造引擎。** 正确顺序是:先学会 Rust → 用现成简单库macroquad做几个小游戏理解"游戏循环/精灵/输入"是什么感觉 → 再学 wgpu 自己写渲染器 → 再逐个搭建引擎系统。**先会用,再会造。**
4. **教程标记含义:**
-**有直接中文教程** —— 跟着做即可
- 🔧 **有教程需改写** —— 教程是英文或别的语言(如 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 缓冲与摄像机" 章节其相机虽是3D2D 把它简化为正交即可)。
- 数学依赖:阶段 0.3 的投影矩阵。
- 产出:能移动/缩放视角看场景。
### 3.4 批处理渲染(Batch Rendering)⚠️/🔧
- 任务:把成百上千个精灵合并成少量 draw call这是 2D 引擎性能关键。
- 资源:**The Cherno** 有专门的 "2D Batch Rendering" 系列C++,思想直接照搬到 wgpuB站搜 "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` 做分级日志。
- 资源:库 READMEThe 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 输入事件文档;手柄用 `gilrs` README。
- 产出:`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 官方(有中文界面);`tiled` rust 库 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**(可当进度看板用)。
---
*祝你造引擎愉快。记住:第一个引擎一定会很烂,这很正常——它的价值不是"好用",而是让你真正理解了引擎是怎么回事。*