过去十年,Unity和Unreal引擎的不断发展为游戏开发者带来了很多便利,使得游戏开发变得更加容易和高效。这两个引擎在客户端的图形渲染、动画效果、物理模拟等方面都取得了很大的进步,为游戏制作提供了强大的工具和资源。
然而,与此同时,游戏服务端的发展相对较慢,依然存在许多挑战。传统的客户端/服务端架构在面对大量玩家同时在线、服务器稳定性和安全性等方面通常会遇到困难。此外,游戏的数据和虚拟资产通常由中心化的服务器管理,这可能导致玩家对其虚拟资产的真正所有权和控制权有所限制。所有权问题也限制了开发者以玩家为中心的角度开发游戏。
很多人对全链上游戏持怀疑态度,认为它毫无意义,原因包括技术限制、用户体验不佳、缺乏完善的内容和生态系统、虚拟资产价值的不稳定性、法律和监管问题。然而,尽管有争议,全链上游戏仍在不断发展,吸引着一些支持者和投资者,他们相信这种新型游戏模式将为游戏行业带来新的机遇和创新。本文将从游戏服务端的角度来帮助读者理解,为什么全链游戏会改变游戏行业。
全链游戏是对游戏服务端进行改造,而非客户端(图形界面)。未来成功的全链游会有多个版本的客户端,2D、3D、甚至文字版。
全链上游戏的定义:使用智能合约来实现全部游戏逻辑、状态(数值、道具等)管理。智能合约是存储在区块链上的计算机程序,让我们能够将传统合同转换成数字化合约。 智能合约遵循 IFTTT (if this then that)逻辑结构。 这意味着它们完全按照程序设定执行并且不能更改。
当前的互联网缺少财富保护机制,你的游戏角色并不属于你。这个痛,国服魔兽世界玩家真的懂了。换个角度来看,游戏不只是游戏,游戏是迄今为止最复杂的应用程序,很多游戏都是对现实世界的模拟。如果游戏能够实现全链上运行,那么同样的技术也可以应用于现实世界中的各类软件。
当前互联网是由各种数据库之上的UI组成,这些数据库随时可能被篡改,很难被其他人信任和使用。人类一直是以推倒重来的方式发展,很难向上构建。新旧交替不可避免,但没人喜欢自己的财富被清零。只有将区块链作为新世界的基础,人类才能完成更大的叙事。
区块链是世界的另一个版本。他们明确地将所有叙事实体的集合保留在其状态内。此外,他们还用计算机代码正式定义了引入规则。具有区块链底层的世界使其居民能够参与共识。他们运行一个计算机网络,就每次引入新的叙事实体达成共识。
从世界的角度来看,有两个重要的区块链概念需要定义:
状态根是世界上所有实体的压缩。有了状态根,我们就可以确定任何实体是否是叙事的。相信世界的国根就等于相信世界本身。0x411842e02a67ab1ab6d3722949263f06bca20c62e03a99812bcd15dce6daf26e
是以太坊(一个具有区块链底层的世界)的状态根,时间为世界标准时间 2022 年 7 月 21 日晚上 7:30:10。以太坊世界的所有实体都被纳入该状态根的计算中。它代表了那个世界在那个特定时间的全部内容。
每个区块链定义了一个状态转换函数。它可以被认为是一个明确的引入规则。它定义了我们如何改变或引入新的叙事实体,给定一组来自人和机器的输入,以及世界的先前状态 - 一组现有的叙事实体。就比特币而言,状态转换函数定义了如何使用余额。
用以太坊(世界计算机)作为自治世界的服务器
在玩多人游戏时,玩家的设备只负责把画面渲染出来,真正负责规则判定的是游戏服务器。
一个简单的例子是Roblox,Roblox的体验默认为多人游戏,并采用客户端-服务器模型运行。Roblox服务器是维护体验状态的最终权威,负责将所有连接的客户端与服务器保持同步。
连接到三个客户端设备的服务器
从服务器到一个特定客户端的通信。例如,新玩家加入游戏,服务器会用一组物品填充该玩家的背包。
从任何客户端到服务器的通信。例如,玩家按P键喝下隐形药水,并告诉服务器使该玩家的角色对所有其他玩家隐形。
服务器和所有连接的客户端之间的通信。例如,服务端会通知所有玩家某个玩家使用了隐形药水。
服务端开发费用通常是多人游戏开发成本的重要组成部分,可能占到总体开发费用的30%到50%甚至更多,具体比例会因游戏的特点而有所不同。
游戏是有状态的程序,因此它取决于时间推移来产生画面变化(无论是真实时间还是逻辑时间,或者区块链时间)。例如,吃豆人游戏中模拟鬼魂不断移动的环境。多人游戏也不例外,但由于多个玩家之间的交互,情况会更复杂。
在一个游戏房间中,多名玩家同时进行交互会产生大量需要同步的数据,比如每个玩家的基本数据、变化数据、技能表现数据、伤害数据、地图数据、怪物数据等。
图中显示了多客户端与服务器的交互情况。您可以看到客户端 B 的网络连接速度较慢,尽管 A 和 B 同时在T0时刻向服务器发送了输入,但 客户端B 的指令在T2到达服务器,因此服务器只有在收到所有输入后才继续处理。在这种情况下游戏的延迟取决于一场比赛中网络最差的玩家。
好消息是,回合制(Turn-based)并不受网络同步问题的影响。慢节奏游戏也不受网络同步问题的影响,例如开心农场。国际象棋,纸牌类游戏,也都属于延迟不敏感的游戏类型。
对于快节奏的游戏, FPS 或一些动作类游戏,网络同步问题一直在困扰游戏开发者。这类游戏,可以通过在本地(即在玩家的计算机上)运行游戏逻辑来模拟游戏,而不是等待服务器更新。但对状态同步要求更严格的游戏则需要在服务端进行滞后补偿。
经典FPS游戏 Counter-Strike 中使用了延迟补偿技术来解决网络延迟带来的状态同步问题。
此屏幕截图是在服务器确认命中后立即在延迟 200 毫秒的侦听服务器上截取的。红色命中框显示客户端上 100 毫秒 + 插值周期前的目标位置。此后,当用户命令传输到服务器时,目标继续向左移动。用户命令到达后,服务器根据估计的命令执行时间恢复目标位置(蓝色碰撞框)。
由于时间测量中存在微小的精度误差,客户端和服务器的命中框并不完全匹配。对于快速移动的物体,即使是几毫秒的微小差异也可能导致几英寸的误差。
问题来了,为什么服务器上的命中检测如此复杂?让客户端告诉服务器击中不就可以了?作弊软件可以将“命中”消息注入到网络数据包中,所以,多人游戏的命中检测必须在服务端进行。
在采用状态同步方案时,客户端只负责渲染画面。客户端接收着服务端传来的数据,包含玩家角色的各种属性和状态,如施放技能、移动、血量、魔法值等。然而,客户端只是根据服务端发送的消息来重放这些属性数值变化。
例如,当玩家角色要施放技能,整个过程是这样的:首先,客户端向服务端发送“释放技能”的指令。服务端于是回应客户端,“在某地以某个方向释放了某个技能”。然后,客户端根据这些信息创建出特效,并让特效沿着指定方向飞行。而服务端则会运用碰撞检测逻辑来判断技能是否与敌方英雄碰撞。当技能与敌方英雄相撞时,服务端将告知客户端,客户端便立即删除特效,并按照服务端的指示,为被击中的英雄减血,同时播放受击特效。
总之,客户端的主要任务是根据服务端传来的数据来呈现游戏的结果,而无法对游戏核心逻辑进行实质性的改变。这样的设计确保了游戏的一致性,使得所有玩家在游戏世界中都能享受相同的游戏体验。
有限状态机(Finite State Machine) ,FSM 被用来控制吃豆人幽灵的行为。它们一次只能有一种操作模式,狩猎、追赶、死亡、等待复活。在经典游戏《盟军敢死队》、《刺客信条》系列等潜行动作游戏中,每当敌人检测到玩家时,他就会从空闲状态转变为警觉状态。几秒钟后,如果玩家没有再次躲到安全的地方,NPC就会开始主动寻找他,并切换到攻击状态。
复制状态机(Replicated State Machine)是指多台机器具有完全相同的状态,运行完全相同的确定性状态机。 它让多台机器协同工作犹如一个强化的组合,其中少数机器宕机不影响整体的可用性。 复制状态机是实现容错的基本方法,被广泛应用于数据复制和高可用等场景。
看到这里读者或许恍然大悟,基于区块链(复制状态机)的游戏是否不需要服务端了?
最理想的情况下的确如此,每个玩家独立运行一个区块链节点,就能自动同步游戏中的所有状态更新。但由于玩家设备的内存和带宽限制,大多数玩家需要通过代理(RPC)来进行游戏,这就意味着玩家设备并不掌握全局游戏数据,那就仍然需要采用状态同步。
但与传统游戏服务端不同,基于区块链的多人游戏的服务端只充当消息中继的角色,它本身不会进行计算和裁定。全链游戏的服务端是可以通用的,无需代码修改就适用于各种类型的多人游戏。所以,全链游戏引擎诞生了,它负责同步区块链最新数据给每位玩家。客户端(玩家的设备)只负责把画面渲染出来。
自治世界起源于2022年,它从MUD服务端游戏引擎诞生开始,目前由lattice团队维护。
MUD 是一个用于开发复杂以太坊应用程序的引擎。它添加了一些用于组织数据和逻辑的约定,并抽象出低级复杂性,以便开发者可以专注于实现游戏规则。它倡导“自治世界”作为超越链上游戏的概念,并提供开源库来解决在以太坊生态系统上构建自治世界的所有挑战。
MUD引擎标准化了数据在链上存储的方式。有了这个标准的数据模型,MUD可以提供所有网络代码来同步智能合约和客户端状态。这包括直接从 RPC 节点或通用 MUD 索引器同步状态。
使用MUD引擎可以让多人游戏开发变得更容易,它提供了如下功能:
智能合约和客户端之间的状态同步(无需代码)
通用索引器(无需代码)
共享合约状态(模块化引用)
自动类型生成(无需代码)、
抛开用户权益保护的问题,单纯从技术角度,全链游戏也是比现有网络游戏更先进的技术方案。与传统服务端动辄需要几万行代码相比,如今最复杂的智能合约也不超过3000行代码。
使用MUD引擎编写Solidity智能合约很像编写protobuf。Protocol Buffers(aka protobuf)是由Google 开发结构化数据序列化协议。protobuf 可以自动生成不同编程语言版本的数据操作代码。MUD引擎也有提供类似功能,但它面向智能合约。
智能合约对规则的定义远比protobuf详细,且包含了业务逻辑,并通过代码强制执行。上图左侧代码更多些,是因为proto3并不包含业务逻辑的代码。MUD引擎会根据智能合约代码自动生成状态同步相关的代码,这让多人游戏开发变得简单便捷。总体而言,智能合约是构建下一代互联网的基础,MUD引擎并不限定在游戏领域,适用于游戏的网络技术也同样适用于其他类型的网络应用程序。这是我从2017年初识以太坊就为之兴奋的东西,使用区块链+智能合约开发者可以构建以用户为中心的软件产品。
以用户为中心的产品需要做到:游戏和资产分离、应用和数据分离。
那些使用MUD构建链上游戏的人并不是在分叉游戏或创造自己的世界。他们正在为已经存在的“自治世界”添加新功能。
使用MUD的主要产品:
自治世界一: OPCraft
OPCraft 是一个自治世界——构成 OP Craft 世界的所有元素(河流、草叶、山脉等)、它们的状态以及用户操作的历史都作为链上信息存储,并最终记录为以太坊(L1)中的交易。
OPCraft就像一个链上版的Minecraft,你可以探索程序生成的景观、开采矿石、放置材料和制作新物品。玩家可以建造雄伟的建筑、竖立纪念碑、改造土地;独自或和好友一起玩。
OPCraft 的网络运行在 OP Mainnet 的OP Stack 架构上,通过简单的调整即可获得更高的吞吐量和更短的出块时间。
自治世界二: Sky Strife
Sky Strife 是一款基于 MUD 构建的链上游戏。 它以快节奏的 RTS 战斗为特色。Sky Strife 的目标是成为一个拥有资源、逻辑和可以自由构建的经济的自治世界。社区将能够在 Sky Strife 的世界中开发链上游戏、规则集和模块。良好的扩展性和开源理念,让社区开发者有机会基于Sky Strife的成果构建一个三国题材游戏,或者加入其他故事。
Sky Strife是一个持续迭代的游戏,每周游戏测试是在周五上午 10:30(美国东部时间)。 在此期间,您可以期待游戏玩法和用户体验的快速变化。
两款完全不同类型的游戏都使用MUD开发,也证明了其适用范围,相信未来会有更多游戏类型出现在全链游行列中。
“我预计,随着《OP Craft》、《Sky Strife》等代表性游戏的不断发展,以及基于MUD的链上游戏的出现和互操作,他们在可组合性设计方面的努力将开始显现。” - derio, Ethereumnavi’s Owner
当前的全链游生态
全链游戏引擎列表:
MUD(lattice)
Dojo
0xCurio
World Engine(Argus)
参考文献: