为什么?
作为一个 Web 全栈开发者,或许是 Web 相关开发做得太久了,逐渐让我失去了当初的热情。从第一次动手开发项目开始,我的工作几乎都围绕着 Web:前端、后端、服务端架构、部署流程……这些虽然各有挑战,但久而久之,面对“写 Web”这件事,我开始有些提不起劲。
我开始好奇,除了 Web 以外,用代码还能写出什么样的东西。
最早我其实是想写一个游戏,当时兴致勃勃的下载了大名鼎鼎的 Unreal 5,翻开了 Unreal 的文档,发现基于引擎的游戏开发跟我想象中的开发并不太一样,更多关注的是关卡设计、素材编排、逻辑搭建。虽然其中也有编程,但是并不是我想要的。我写游戏的目的并不是为了去写一个好玩的游戏,而是想希望通过编写别的内容来拓宽自己的知识面。
于是,这个想法暂时被搁置了。
直到有一天,我偶然在 YouTube 上刷到了 TheCherno 的《Game Engine Series》,看他一点点从底层搭建一个游戏引擎,勾起了我浓厚的兴趣:为什么不自己也写一个游戏引擎呢?
什么是游戏引擎?
在做一个游戏引擎之前,我需要知道什么样的东西可以称之为游戏引擎或者说作为一个最小的游戏引擎需要实现哪些功能。
通过 AI、Google 和一些现有引擎的资料整理,我大致列出如下几个核心模块:
- 窗口系统 & 用户输入:处理窗口的创建、键盘/鼠标/手柄输入等底层事件。
- 渲染系统:负责图形渲染,2D、3D 渲染,Shader 管线等。
- 音频系统:播放背景音乐、音效等。
- 物理系统:包括碰撞检测、刚体模拟、力的作用等。
- 脚本系统:让游戏逻辑能通过脚本语言(如 Lua、Python 或内嵌 DSL)编写。
- 实体组件系统(ECS):用于组织游戏对象与行为。
这些模块就像一个个零件,最终拼成一台完整的“游戏机器”。而游戏引擎就是把这些零件封装为开发者可用的“工具箱”——有的以代码库(如 Bevy)形式提供,有的则是带有完整 UI 编辑器的应用程序(如 Unity、Unreal)。
对于我来说,先把模块一个个做起来,至于未来这个引擎是库、是 GUI 应用、还是支持插件的框架,都可以再慢慢探索。
用什么语言?
为什么不用 Rust 呢?
确实,Rust 是一个很有吸引力的选择:内存安全、现代语法、生态不断发展,Bevy 就是 Rust 社区中优秀的游戏引擎项目之一。
但现实是,游戏领域,C++ 仍旧拥有不可忽视的优势:
- 绝大多数主流游戏引擎(Unreal Engine、CryEngine)都是基于 C++ 开发;
- C++ 拥有庞大的游戏开发生态和丰富的开源资源;
- 很多图形 API(如 DirectX、OpenGL、Vulkan)的示例、封装库也都以 C++ 为主。
那就选择 C++ 吧!
后记
写这篇博客的目的是想为自己立一个目标。游戏引擎这样的项目不会是一个短期内就能完成的事情,并且还是对于我来说未知的领域。开发过程中肯定有坎坷、困难,但是我希望自己能坚持下去,一点一点把它做出来。
当然,这个引擎最后肯定是跟 Unity、Unreal 没法比。享受的就是开发、探索的过程!😎