- 搭建 Cargo workspace:engine 库 + sandbox 可执行示例,构建/运行通过 - 加入分阶段学习开发计划(Markdown / CSV / xlsx) - 配置 .gitignore、README、MIT 许可信息 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
307 lines
17 KiB
Markdown
307 lines
17 KiB
Markdown
# 用 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 缓冲与摄像机" 章节(其相机虽是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 输入事件文档;手柄用 `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 |
|
||
|
||
> 详细逐条任务见同目录下的 **引擎学习开发计划.csv**(可导入表格软件当进度看板用)。
|
||
|
||
---
|
||
|
||
*祝你造引擎愉快。记住:第一个引擎一定会很烂,这很正常——它的价值不是"好用",而是让你真正理解了引擎是怎么回事。*
|