【Rust日报】没有 Rust,就没有这款游戏引擎
没有 Rust,就没有这款游戏引擎
这篇文章是由安德烈斯·弗朗哥撰写,记录了他使用 Rust 开发游戏引擎以及制作完成这款游戏并最终上线的心路历程。在文章开篇,作者强调:
“这并非是对其他游戏引擎的批评。我不是说“我的引擎更好,你的引擎不好”,而是“现有的引擎不太符合我的需求,所以我想走自己的路”。不同的人,不同的时间,可能会有不同的结果,这完全没问题。
最初,作者希望开发一款支持以下特性的多人游戏引擎:
-
支持2名或更多玩家;
-
实时、响应迅速的动作类玩法(非回合制);
-
玩家间高度互动(如技能、状态相互影响);
-
能在高延迟(如跨大洲)网络下稳定运行。
这些需求排除了大多数传统同步方案,最终选择了基于回滚(rollback-based)的网络同步模型,并采用服务器权威 + 客户端回滚的架构(不同于传统P2P格斗游戏的回滚方式)。
选择 Rust 的原因
-
确定性保障:
-
-
使用 fixed-point 替代浮点数,避免跨平台浮点运算不确定性;
-
定点数支持完全排序、无 NaN/Infinity,提升调试安全性。
-
-
可复现的随机数:
-
-
通过 rand_pcg crate 轻松实现跨平台确定性随机,仅需一行依赖。
-
-
简洁高效的序列化:
-
-
借助 serde + bincode,网络消息的编码/解码极其简单可靠。
-
-
内存安全与性能兼顾:
-
-
自研轻量 ECS 系统,使用
Cell/RefCell实现内部可变性,牺牲部分并行性换取开发效率与确定性; -
Rust 的零成本抽象和高效克隆(配合
clone_from优化)显著提升回滚性能。
-
-
网络层实现便捷:
-
-
自定义基于 UDP 的可靠有序消息协议,支持分片、ACK、心跳等;
-
甚至解决了 Windows 平台上 UDP 的“虚拟连接重置”怪异行为。
-
实际效果
在模拟网络条件下测试:
-
20ms RTT:几乎无感;
-
70ms RTT:轻微回滚,仍流畅;
-
140ms RTT(如美欧之间):明显但可玩,未达不可接受程度。
原文:https://blog.vermeilsoft.com/2025-09-rust-game-engine/
模式匹配进阶
在文章中,作者列绝了模式匹配的几种场景,以及几种进阶技巧。并给出了一些最佳实践:
-
性能考虑:
-
-
对于非简单类型(如字符串、复杂条件),将高频或更具体的分支放在前面
-
简单
enum或整数匹配由编译器优化为跳转表,顺序无关
-
-
优先使用
match而非if/else处理enum: -
-
获得编译器的穷尽性检查和更好优化
-
-
一次性解构多个字段:
-
-
避免重复访问,提高可读性与意图明确性
-
-
用
matches!做布尔判断: -
-
比单臂
match更简洁,如matches!(opt, Some(42))
-
模式匹配是贯穿 Rust 的核心机制,掌握 ref、@、守卫、切片模式等技巧,能显著提升代码表达力。 在平时开发中,应合理选择模式(let vs if let vs match)和结构,兼顾性能与可维护性。
Sguaba: 类型安全的空间数学库
大约一个月前,Jon Gjengset 在阿姆斯特丹 Rust 线下聚会上做了一场关于 Sguaba (一个类型安全的空间数学 Rust crate)的演讲,现场视频已经发布到 YouTube:
https://www.youtube.com/watch?v=kESBAiTYMoQ
--
From 日报小组 Yuan YQ
社区学习交流平台订阅:
-
Rustcc 论坛: 支持 RSS
-
微信公众号:Rust语言中文社区
更多推荐


所有评论(0)