< 返回版块

Yuan YQ 发表于 2025-09-30 11:31

没有 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

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页