全链游戏-重新定义游戏服务端

过去十年,Unity和Unreal引擎的不断发展为游戏开发者带来了很多便利,使得游戏开发变得更加容易和高效。这两个引擎在客户端的图形渲染、动画效果、物理模拟等方面都取得了很大的进步,为游戏制作提供了强大的工具和资源。

unreal 5
unreal 5

然而,与此同时,游戏服务端的发展相对较慢,依然存在许多挑战。传统的客户端/服务端架构在面对大量玩家同时在线、服务器稳定性和安全性等方面通常会遇到困难。此外,游戏的数据和虚拟资产通常由中心化的服务器管理,这可能导致玩家对其虚拟资产的真正所有权和控制权有所限制。所有权问题也限制了开发者以玩家为中心的角度开发游戏。

很多人对全链上游戏持怀疑态度,认为它毫无意义,原因包括技术限制、用户体验不佳、缺乏完善的内容和生态系统、虚拟资产价值的不稳定性、法律和监管问题。然而,尽管有争议,全链上游戏仍在不断发展,吸引着一些支持者和投资者,他们相信这种新型游戏模式将为游戏行业带来新的机遇和创新。本文将从游戏服务端的角度来帮助读者理解,为什么全链游戏会改变游戏行业。

全链游戏是对游戏服务端进行改造,而非客户端(图形界面)。未来成功的全链游会有多个版本的客户端,2D、3D、甚至文字版。

换一个角度思考游戏

魔兽世界国服关服最后一天别忘了下载好“电子骨灰盒”

全链上游戏的定义:使用智能合约来实现全部游戏逻辑状态(数值、道具等)管理。智能合约是存储在区块链上的计算机程序,让我们能够将传统合同转换成数字化合约。 智能合约遵循 IFTTT (if this then that)逻辑结构。 这意味着它们完全按照程序设定执行并且不能更改。

当前的互联网缺少财富保护机制,你的游戏角色并不属于你。这个痛,国服魔兽世界玩家真的懂了。换个角度来看,游戏不只是游戏,游戏是迄今为止最复杂的应用程序,很多游戏都是对现实世界的模拟。如果游戏能够实现全链上运行,那么同样的技术也可以应用于现实世界中的各类软件。

当前互联网是由各种数据库之上的UI组成,这些数据库随时可能被篡改,很难被其他人信任和使用。人类一直是以推倒重来的方式发展,很难向上构建。新旧交替不可避免,但没人喜欢自己的财富被清零。只有将区块链作为新世界的基础,人类才能完成更大的叙事。

自治世界

区块链是世界的另一个版本。他们明确地将所有叙事实体的集合保留在其状态内。此外,他们还用计算机代码正式定义了引入规则。具有区块链底层的世界使其居民能够参与共识。他们运行一个计算机网络,就每次引入新的叙事实体达成共识。

从世界的角度来看,有两个重要的区块链概念需要定义:

  1. 区块链状态根

状态根是世界上所有实体的压缩。有了状态根,我们就可以确定任何实体是否是叙事的。相信世界的国根就等于相信世界本身。0x411842e02a67ab1ab6d3722949263f06bca20c62e03a99812bcd15dce6daf26e是以太坊(一个具有区块链底层的世界)的状态根,时间为世界标准时间 2022 年 7 月 21 日晚上 7:30:10。以太坊世界的所有实体都被纳入该状态根的计算中。它代表了那个世界在那个特定时间的全部内容。

  1. 区块链状态转换函数

每个区块链定义了一个状态转换函数。它可以被认为是一个明确的引入规则。它定义了我们如何改变或引入新的叙事实体,给定一组来自人和机器的输入,以及世界的先前状态 - 一组现有的叙事实体。就比特币而言,状态转换函数定义了如何使用余额。

用以太坊(世界计算机)作为自治世界的服务器

https://twitter.com/LogarithmicRex/status/1545593124839374848
https://twitter.com/LogarithmicRex/status/1545593124839374848

回顾-传统游戏服务端

在玩多人游戏时,玩家的设备只负责把画面渲染出来,真正负责规则判定的是游戏服务器。

一个简单的例子是Roblox,Roblox的体验默认为多人游戏,并采用客户端-服务器模型运行。Roblox服务器是维护体验状态的最终权威,负责将所有连接的客户端与服务器保持同步。

reblox server-clients
reblox server-clients

连接到三个客户端设备的服务器

从服务器到一个特定客户端的通信。例如,新玩家加入游戏,服务器会用一组物品填充该玩家的背包。

server-client
server-client

从任何客户端到服务器的通信。例如,玩家按P键喝下隐形药水,并告诉服务器使该玩家的角色对所有其他玩家隐形。

client-server
client-server

服务器和所有连接的客户端之间的通信。例如,服务端会通知所有玩家某个玩家使用了隐形药水。

boardcast
boardcast

服务端开发费用通常是多人游戏开发成本的重要组成部分,可能占到总体开发费用的30%到50%甚至更多,具体比例会因游戏的特点而有所不同。

深入服务端技术

游戏是有状态的程序,因此它取决于时间推移来产生画面变化(无论是真实时间还是逻辑时间,或者区块链时间)。例如,吃豆人游戏中模拟鬼魂不断移动的环境。多人游戏也不例外,但由于多个玩家之间的交互,情况会更复杂。

在一个游戏房间中,多名玩家同时进行交互会产生大量需要同步的数据,比如每个玩家的基本数据、变化数据、技能表现数据、伤害数据、地图数据、怪物数据等。

图中显示了多客户端与服务器的交互情况。您可以看到客户端 B 的网络连接速度较慢,尽管 A 和 B 同时在T0时刻向服务器发送了输入,但 客户端B 的指令在T2到达服务器,因此服务器只有在收到所有输入后才继续处理。在这种情况下游戏的延迟取决于一场比赛中网络最差的玩家。

好消息是,回合制(Turn-based)并不受网络同步问题的影响。慢节奏游戏也不受网络同步问题的影响,例如开心农场。国际象棋,纸牌类游戏,也都属于延迟不敏感的游戏类型。

对于快节奏的游戏, FPS 或一些动作类游戏,网络同步问题一直在困扰游戏开发者。这类游戏,可以通过在本地(即在玩家的计算机上)运行游戏逻辑来模拟游戏,而不是等待服务器更新。但对状态同步要求更严格的游戏则需要在服务端进行滞后补偿。

滞后补偿技术

经典FPS游戏 Counter-Strike 中使用了延迟补偿技术来解决网络延迟带来的状态同步问题。

Counter-Strike
Counter-Strike

此屏幕截图是在服务器确认命中后立即在延迟 200 毫秒的侦听服务器上截取的。红色命中框显示客户端上 100 毫秒 + 插值周期前的目标位置。此后,当用户命令传输到服务器时,目标继续向左移动。用户命令到达后,服务器根据估计的命令执行时间恢复目标位置(蓝色碰撞框)。

由于时间测量中存在微小的精度误差,客户端和服务器的命中框并不完全匹配。对于快速移动的物体,即使是几毫秒的微小差异也可能导致几英寸的误差。

问题来了,为什么服务器上的命中检测如此复杂?让客户端告诉服务器击中不就可以了?作弊软件可以将“命中”消息注入到网络数据包中,所以,多人游戏的命中检测必须在服务端进行。

状态同步

在采用状态同步方案时,客户端只负责渲染画面。客户端接收着服务端传来的数据,包含玩家角色的各种属性和状态,如施放技能、移动、血量、魔法值等。然而,客户端只是根据服务端发送的消息来重放这些属性数值变化。

例如,当玩家角色要施放技能,整个过程是这样的:首先,客户端向服务端发送“释放技能”的指令。服务端于是回应客户端,“在某地以某个方向释放了某个技能”。然后,客户端根据这些信息创建出特效,并让特效沿着指定方向飞行。而服务端则会运用碰撞检测逻辑来判断技能是否与敌方英雄碰撞。当技能与敌方英雄相撞时,服务端将告知客户端,客户端便立即删除特效,并按照服务端的指示,为被击中的英雄减血,同时播放受击特效。

总之,客户端的主要任务是根据服务端传来的数据来呈现游戏的结果,而无法对游戏核心逻辑进行实质性的改变。这样的设计确保了游戏的一致性,使得所有玩家在游戏世界中都能享受相同的游戏体验。

游戏是有限状态机(Finite State Machine),区块链是复制状态机(Replicated State Machine)

FSM
FSM

有限状态机(Finite State Machine) ,FSM 被用来控制吃豆人幽灵的行为。它们一次只能有一种操作模式,狩猎、追赶、死亡、等待复活。在经典游戏《盟军敢死队》、《刺客信条》系列等潜行动作游戏中,每当敌人检测到玩家时,他就会从空闲状态转变为警觉状态。几秒钟后,如果玩家没有再次躲到安全的地方,NPC就会开始主动寻找他,并切换到攻击状态。

复制状态机(Replicated State Machine)是指多台机器具有完全相同的状态,运行完全相同的确定性状态机。 它让多台机器协同工作犹如一个强化的组合,其中少数机器宕机不影响整体的可用性。 复制状态机是实现容错的基本方法,被广泛应用于数据复制和高可用等场景。

看到这里读者或许恍然大悟,基于区块链(复制状态机)的游戏是否不需要服务端了?

最理想的情况下的确如此,每个玩家独立运行一个区块链节点,就能自动同步游戏中的所有状态更新。但由于玩家设备的内存和带宽限制,大多数玩家需要通过代理(RPC)来进行游戏,这就意味着玩家设备并不掌握全局游戏数据,那就仍然需要采用状态同步

但与传统游戏服务端不同,基于区块链的多人游戏的服务端只充当消息中继的角色,它本身不会进行计算和裁定。全链游戏的服务端是可以通用的,无需代码修改就适用于各种类型的多人游戏。所以,全链游戏引擎诞生了,它负责同步区块链最新数据给每位玩家。客户端(玩家的设备)只负责把画面渲染出来。

为什么全链游戏正在流行

自治世界起源于2022年,它从MUD服务端游戏引擎诞生开始,目前由lattice团队维护。

MUD 是一个用于开发复杂以太坊应用程序的引擎。它添加了一些用于组织数据和逻辑的约定,并抽象出低级复杂性,以便开发者可以专注于实现游戏规则。它倡导“自治世界”作为超越链上游戏的概念,并提供开源库来解决在以太坊生态系统上构建自治世界的所有挑战。

MUD引擎标准化了数据在链上存储的方式。有了这个标准的数据模型,MUD可以提供所有网络代码来同步智能合约和客户端状态。这包括直接从 RPC 节点或通用 MUD 索引器同步状态。

MUD引擎特性图
MUD引擎特性图

使用MUD引擎可以让多人游戏开发变得更容易,它提供了如下功能:

  • 智能合约和客户端之间的状态同步(无需代码)

  • 通用索引器(无需代码)

  • 共享合约状态(模块化引用)

  • 自动类型生成(无需代码)、

抛开用户权益保护的问题,单纯从技术角度,全链游戏也是比现有网络游戏更先进的技术方案。与传统服务端动辄需要几万行代码相比,如今最复杂的智能合约也不超过3000行代码。

使用MUD引擎编写Solidity智能合约很像编写protobuf。Protocol Buffers(aka protobuf)是由Google 开发结构化数据序列化协议。protobuf 可以自动生成不同编程语言版本的数据操作代码。MUD引擎也有提供类似功能,但它面向智能合约。

左侧智能合约,右侧 proto3
左侧智能合约,右侧 proto3

智能合约对规则的定义远比protobuf详细,且包含了业务逻辑,并通过代码强制执行。上图左侧代码更多些,是因为proto3并不包含业务逻辑的代码。MUD引擎会根据智能合约代码自动生成状态同步相关的代码,这让多人游戏开发变得简单便捷。总体而言,智能合约是构建下一代互联网的基础,MUD引擎并不限定在游戏领域,适用于游戏的网络技术也同样适用于其他类型的网络应用程序。这是我从2017年初识以太坊就为之兴奋的东西,使用区块链+智能合约开发者可以构建以用户为中心的软件产品。

以用户为中心的产品需要做到:游戏和资产分离应用和数据分离

那些使用MUD构建链上游戏的人并不是在分叉游戏或创造自己的世界。他们正在为已经存在的“自治世界”添加新功能。

使用MUD的主要产品

自治世界一: OPCraft

OPCraft 是一个自治世界——构成 OP Craft 世界的所有元素(河流、草叶、山脉等)、它们的状态以及用户操作的历史都作为链上信息存储,并最终记录为以太坊(L1)中的交易。

OPCraft就像一个链上版的Minecraft,你可以探索程序生成的景观、开采矿石、放置材料和制作新物品。玩家可以建造雄伟的建筑、竖立纪念碑、改造土地;独自或和好友一起玩。

OPCraft 的网络运行在 OP Mainnet 的OP Stack 架构上,通过简单的调整即可获得更高的吞吐量和更短的出块时间。

自治世界二: Sky Strife

Sky Strife游戏画面
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

当前的全链游生态

全链游生态图
全链游生态图

全链游戏引擎列表:

  1. MUD(lattice)

  2. Dojo

  3. 0xCurio

  4. World Engine(Argus)

参考文献:

Subscribe to dashuo
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.