“抽象是让软件易于扩展和改进的关键。” — 阿兰·帕特森(Alan Kay)
游戏引擎的起源
从一般到抽象的演进
传统 Web2的游戏研发经历了从单体代码架构演进为游戏引擎框架的的弹性开发模式,和所有引擎框架一样,主要解决的问题就是抽象和具体之间的冲突。例如游戏对战模块,玩家和加入、退出的过程对于所有游戏的设计几乎就是一致的,我们可以抽象成一系列接口,然后交给游戏开发者去实现具体的实例,类似于于面向对象编程中的接口与实现设计。
目前游戏行业中最流行的游戏框架是Unity。Unity 是由 David Helgason、Nicholas Francis、Joachim Ante 三位年轻人在2004创立 ,2020年在交所上市,目前市值160亿美金。Unity的发起起源于当时游戏开发成本及其的高昂,动辄几十万美金的开发成本,于是这三个年轻人从车库开始发喊出了“让游戏开发引擎的大众化”(Democratizing The Game Engine)的口号。截止目前,Unity占据了48%的市场份额,累计服务超过全球27亿的游戏玩家用户,超过70%的游戏都会基于Unity开发。

视角拉回到链上游戏开发。目前GameFi游戏的开发涉及到链上状态、资产管理和链下游戏逻辑的交互。MUD框架背后的团队Lattice陆续研发设计了Dark Forest, OpCraft等全链游戏后,开始将视角从游戏的细节开发转移到如何抽象出一个全链/AW游戏的框架,重新定义链上游戏的状态管理接口和组合、权限管理(ECS抽象模型)。由此开启了游戏研发团队和引擎框架团队的分工和协作,前者更关心游戏的价值逻辑,后者主要推动抽象底层能力的设计和集成,MUD更像AW(Autonomous Worlds)游戏领域里面的Unity。

MUD 核心架构设计思路的演进
ECS架构设计- V1版本的重要抽象思路
ECS架构(Entity/Component/System)并不是MUD首创,在上述的Unity引擎框架中就已经采用了ECS模型,主要适合大型复杂游戏的设计中。实际上,ECS设计理念并不是一个新兴的事物,早在90年代就已经提出了。但是大规模被游戏界认可还是来自于《守望先锋》这款游戏,在2017年的GDC大会上,《守望先锋》团队在大会上分享了他们的最佳实践:《 Overwatch Gameplay Architecture and Netcode》。在这次技术分享中完整提出了ECS的最佳实践,包含了模块:World,Entity,Component和System。
MUD 框架在行业流行的ECS基础上,基于链上计算、状态模式总结设计AW游戏的版本。主要设计理念就是状态与计算分离,玩家和系统事件驱动状态概念。
- 实体(Entity)
- 就是一个ID,这个ID对应了的集合,例如游戏中的玩家角色
- 组件(Component)
- 组件用来存储游戏状态并且没有任何的行为(Behavior),玩家位置和级别
- 系统(System)
0xparc在这篇技术文章《MUD: An engine for Autonomous Worlds》中详细介绍了ECS的细节和案例。
社区计算 –V2版本的的重大提升
V2版本相比较V1,在链上状态管理、合约权限的继承和组合中做出了更多的改进。特别是社区计算概念提出(community computers),为AW游戏的场景提供了更坚实的技术和设计理念基础。
World 设计 – 社区计算概念提出(community computers)
World 独立包含了资源(Resources)和 空间(Namespaces)。三大核心资源:Namespace Table System,例子如下。基于namespace可以实现权限控制-write/read。
root
|-- mudswap <- Namespace
| Balance <- Table
| Pool <- Table
| Transfer <- System
|-- Tetris <- Namespace
| Board <- Table
| Move <- System
| Drop <- System
| Score <- Table
| Win <- System
游戏开发者可以独立部署,也可以继承-*更大的想象空间,*并且给出以下的假定场景:
- 我正在构建一个独立的概念验证: 从一个新的 World 开始。
- 我正在为一个新的链构建一个项目,该链还没有 World: 从一个新的 World 开始。
- 我正在为现有项目构建功能,例如链上游戏的市场或部署在同一世界中的两个 AMM 的聚合器: 在包含您要扩展的应用程序的 World 上构建。
- 我想要一些只能由 World 的根用户/DAO 安装的功能,而没有 World 包含它们: 从一个新的 World 开始。
- 我想为我之前构建的应用程序添加新功能: 在您最初部署应用程序的 World 上构建。
基于world的权限和空间设计,MUD提出了一个新的概念:社区计算(Community Computers)。
社区计算共享计算环境,与链无关,核心是共享、继承和组合,这些都是AW游戏的核心思想。

存储Store设计 – 多链状态管理
V2版本中取代了实体(Entity) 的概念,提出了一个新的模块叫**存储(Store),**上层实现了类似于SQLite接口,底层基于链的合约实现了链上数据库(Onchain Database)。这种设计直接屏蔽了多链状态的管理复杂性,提供了多链的状态管理、互操作性等功能。
// definition of MyTable
tables: {
MyTable: {
schema: {
foo: "uint256",
bar: "bool",
fooArray: "uint256[]", // Store supports dynamic arrays
barArray: "uint256[2]" // Store also supports static arrays
},
},
}
客户端MODE – 降低状态查询的复杂度
MODE模块极大的降低游戏客户端对状态查询的复杂度,帮助开发者屏蔽了原始的全节点交易明细拆解。主要核心功能: 高效的store索引,依赖特殊客户端Node https://mud.dev/mode [PostgresDB]

MUD开发者生态
开源贡献者的活跃度
通过分析github代码库的统计指标,我们可以看出来今年4月份以后代码的更新度变的活跃起来,最高一个月有将近100次的贡献记录。目前大概有39名活跃开源贡献者,alvrs 和holic是贡献最多的俩名作者。

MUD生态游戏落地
MUD背后的团队Lattice今年也开始积极的扶持AW游戏的孵化和创新,其中于今年5月份在ETHGlobal支持一场AW Hackthon,提供了50000美金的扶持。在此期间,有435 开发者报名,收获了109个项目提交,最后选出了10名获胜者。
- 🧱 OPCraft2
- 🤑 Coin Race
- 🧬 Autonomous Game of Life
- 🍩 Netherscape
- 🎲 MUDVRF
- 🗺️ Realm of Pepe
- 🎨 Isle of Colors
- 💎 Garnet
- ⚔️ PFP WAR
- 🚢 Trade Wars