# 动作拆分

对于 MMO 游戏来说,结算大多数都放在服务器,这就导致玩家每次施放技能时,如果都要询问服务期是否允许,玩家会感觉延迟很大,尤其对打击感要求很高的 ARPG 游戏中。
因此对于普通攻击这种高频短促的技能,我们通常允许客户端先播放动作,同时请求服务器。如果服务端判定技能不能释放 (比如中了定身 Buff), 会通知客户端取消释放。客户端的表现就像空砍了一下,但是有些技能不适合客户端先行,比如跳斩活着冲锋。如果客户端先行,会导致服务端判定失败。被强制拉回,这样体验很不好。所以,对这些技能,就需要枚数先制作出完整的动作,然后分为三段 Pre -> Idle -> Cast 书上的三段式中客户端与服务端的通信流程如下图所示

# 服务端

服务端技能系统主要由三个类 Skill,Buff,Action

  • Skill 对象的生存期对应一次技能的完整释放,它主要控制技能的流程,包括前摇,结算,后摇等,有的技能可能有多次结算

然后书中针对 Skill 给的设计图是基于行为树的

  • Buff Buff 对象对应玩家身上的各种持续效果,比如回血,中毒,定身等,Buff 之间存在互斥叠加等规则。

  • Action 对象是真正负责结算的单元。无论是 Skill 还是 Buff, 都是通过 Action 来实现结算的。Action 的执行是树形结构,从根节点开始执行,Action 自己维护生存周期,和技能释放无关。

然后给的也是行为树 = = 总而言之,大差不差