【Rust日报】2025-09-30 没有 Rust,就没有这款游戏引擎

【Rust日报】2025-09-30 没有 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语言中文社区

相关文章

槟城天气恶劣 飞机难降落
365bet在线登录

槟城天气恶劣 飞机难降落

📅 08-16 👁️ 5379
如何挖掘客户的深层需求?需求挖掘指南
365bet在线登录

如何挖掘客户的深层需求?需求挖掘指南

📅 10-01 👁️ 9090