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

17 KiB
Raw Permalink Blame History

用 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。
  • 中文教程
  • 产出:能独立写出带结构体/枚举/trait 的小程序(如命令行计算器、待办清单)。

0.2 数据结构与基本算法 /🔧

  • 任务:数组/动态数组、哈希表、栈、队列、树;时间复杂度概念。引擎里到处是它们。
  • 资源《Rust 语言圣经》中"手把手实现链表"章节其余概念可看任意中文数据结构课程B站搜"数据结构 基础"),思想通用。
  • 产出:理解"为什么 ECS 用连续数组存组件会更快"。

0.3 游戏数学:线性代数

  • 任务:向量(加减、点乘、叉乘、归一化)、矩阵(变换、平移/旋转/缩放)、坐标系、正交投影。2D 引擎几乎只需要这些。
  • 中文教程
  • 产出:能手算"把一个点旋转 30° 再平移"对应的矩阵。

0.4 计算机图形学基础认知

  • 任务:理解光栅化、像素、帧缓冲、颜色、什么是 GPU/着色器、渲染管线大致流程。只需 2D 相关部分,光线追踪/动画那几讲可略读。
  • 中文教程GAMES101同上重点看"光栅化""变换"部分。
  • 产出:能说清"一张图片是怎么显示到屏幕上的"。

0.5 游戏引擎宏观认知 + 设计模式 🔧

  • 任务:建立"引擎由哪些系统组成"的整体地图;学常见游戏编程模式(游戏循环、状态机、观察者、对象池、组件模式等)。
  • 资源
  • 产出:能画出一张"我的引擎要有哪些模块"的草图。

0.6 Git 版本控制


阶段 1 —— 工具链与开发环境

1.1 安装 Rust 工具链

1.2 编辑器/IDE 配置

  • 任务VS Code + rust-analyzer 插件(自动补全、报错、跳转);会用调试器。
  • 教程B站搜 "VS Code Rust 开发环境配置",或 rust-analyzer 官网。
  • 产出:写代码有智能提示和实时报错。

1.3 理解 crate 生态

  • 任务:会查 https://crates.iohttps://docs.rs ;理解后面要用的关键库定位:
    • winit(窗口)、wgpu(图形)、glam(数学)、image(图片加载)、rodio/kira(音频)、eguiGUIserde(序列化)、hecs/bevy_ecsECS可选
  • 产出:能自己在 docs.rs 查一个库怎么用。

阶段 2 —— 窗口与渲染入门(先会用,建立手感)

2.A 用现成简单库做手感(强烈建议先做)/🔧

  • 任务:用 macroquad(极简 2D 库)做 1~2 个小游戏(贪吃蛇、打砖块),亲身体会"游戏循环、画精灵、读输入、播音效"。这一步让你知道引擎最终要给用户提供什么样的体验。
  • 教程
  • 产出:一个能玩的贪吃蛇。做完你会对"引擎该有什么"豁然开朗。

2.B 开始造引擎:窗口 + GPU 初始化

  • 任务:用 winit 创建窗口、处理窗口事件(关闭、缩放);用 wgpu 初始化 GPU、画出第一个三角形。
  • 中文教程
  • 产出:自己的窗口里出现一个彩色三角形。

阶段 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_loggertracing 做分级日志。
  • 资源:库 READMEThe Cherno 也有 "Logging" 一集讲设计思路。
  • 产出:能打印分级调试信息。

4.4 事件系统 🔧

  • 任务:窗口/输入/自定义事件的分发机制(观察者模式)。
  • 资源:The Cherno "Event System" 系列C++,思想通用);《游戏编程模式》观察者/事件队列章节(中文)。
  • 产出:输入和窗口事件能被各系统订阅处理。

4.5 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 --releasewgpu/winit 对 WASM 支持的文档(《学习 wgpu》中文版有 Web 章节)。
  • 产出:把游戏发给朋友能直接玩,或发布到 itch.io。

三、贯穿全程的好习惯

  • 每个阶段都写小 demo 验证,别憋大招。能跑起来的丑东西,胜过完美的设想。
  • 多读开源引擎源码当字典:Bevy(最大最现代)、ggez(小而经典 2Dmacroquad(极简)。遇到不会的就去翻它们怎么写。
  • 理论卡住时回到 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(可当进度看板用)。


祝你造引擎愉快。记住:第一个引擎一定会很烂,这很正常——它的价值不是"好用",而是让你真正理解了引擎是怎么回事。