技能系统设计笔记 4
记录时间:2009年12月12日
技能的同步设计:
如果只是考虑客户端的功能,技能的同步功能是不会影响到技能的设计的。可惜我们并非生存于一个完美的世界,MMORPG中网络的不稳定性,安全性导致了技能同步的复杂度和对技能设计的深层次影响。
技能同步主要面对的问题是:
1.客户端表现的既时性
最理想的情况下,用户不需要为网络状况买单,即使是在网络质量很差的情况下,我们也希望他能够拥有完美的游戏体验。
2.客户端之间表现的一致性
不要出现网络玩家与本地玩家在技能表现上有明显差异
3.技能逻辑的一致性
如果在本地看到一次技能成功暴击,而对方实际没有受到任何伤害,玩家的体验会很糟糕
4.技能的安全性
不要试图欺骗服务器,使用非法手段修改技能逻辑
在最早的设计中,设计的重心偏向于问题1,2。为了即时性,我们忽略了问题3,4的重要度。结果是不言而喻的,对于MMORPG来说,问题3,4的优先级要远高于1,2。重新调整设计不可避免。但前期的设计也不是一无是出,因为我们已经确定了一个技能表现的基线,并借此发现了很多单纯靠设计无法发现的潜在问题。
今天我先记录下早期的设计思路,阐述这种设计的来源与优缺点,为后期的调整设计确定基线。
从本地的表现来看,技能可以看成是一个连续的,有时间限制的事件序列。在这个时间线上,会出现一些关键事件,例如伤害,发射子弹或其他。我曾经试图利用信号原理来描述这一事物。一个连续的信号序列上,必然存在一些离散的特征点,这些点才是该信号区别于其他信号的关键信息。换句话说,技能事件才是该技能真正需要在客户端-服务器,客户端-客户端之间传递的信息,每个终端都可以根据这些关键信息还原出技能的连续信号(如果它需要)。
我们可以很容易的识别出这些关键点,技能的启动,中断,结束,打击点、、、。剩下的问题是,我们需要在这些关键点上同步什么数据,以及我们应该以哪个终端的数据作为还原技能的数据标准。
最理想的情况,数据的来源应该是唯一的,这样我们可以很简单的满足问题3。在MMORPG的网络拓朴中,这个来源必然是中心服务器。但在前期设计时,我们将网络延时的严重性和问题1的重要性夸大了,服务器的数据来源也许会很晚,玩家的体验也许会很差,等等等等。问题夸大的结果是我们选择了一种看似优美,实际会导致更多问题的的设计。
这种设计的中心是忽略掉问题3,如果不需要考虑问题3,那我们可以选择多个数据来源,每个终端都选择自己作为数据来源,网络延时再也不能影响我们了,所有人都是在玩单机游戏,这不是很美妙的事情吗,没有人作过,也许没有人想过,太完美了,我们来动手吧。
看懂了吧,我们在各个终端上完全独立的执行着技能,并触发着各自的关键事件,直到技能结束。客户端无需等待服务器的应答,无需为网络延时买单。技能的安全性也得到了保证,应为最终的逻辑数据是由服务器产生的,也许客户端可以在本地作弊,但最终的结果仍然是正确的,别的网络玩家甚至看不到作弊玩家的不合理行为。
如果只有作弊时才会出现问题3时就好了,这样我会一直坚持这种设计,直到它成为一种工业标准:P。
其实即使忽略掉多人情况下的各种复杂问题,上述设计带来了一种更为复杂的需求
如何实现世界的一致性
如果各个终端的世界是不一致的,那同一个技能逻辑也会在不同世界中产生不同的结果。但世界是不可能完全一致的,因为我们在网络上。一个玩家在本地恢复了HP,他在别的终端上也许还没有恢复,因为网络延时了!!。换句话说,我们没有解决问题,只是把问题转移了,最终我们仍然需要为网络延时买单。,
多人游戏的情况下,这种问题会加剧并最终锐化。感谢我们尽快的发现了这个问题。
有问题的设计要及时修正,这次我们不要这么极端了,逻辑性的关键事件,还是交给中心服务器来处理吧,并即时的把处理结果通知给其他终端,本地终端仍然处理一些非逻辑的关键事件,例如特效,音效。也许技能的特效和作用之间无法完全一致了,但问题还不算太严重,如果加入一点小技巧(将关键点的时间与网络延时合起来考虑),大多数情况下体验还是不错的。