前言

  很久没有更新博客,中间迁移过一次博客,后来一直忙于项目的开发,忙的晚上回去没时间写博客,周日又要自我调整一下,所以空闲了很久没有继续写博客。最近终于慢慢放慢节奏,项目也快上线了,可以有空写一些个人的笔记。准备写一个战斗系统的入门笔记,也算一个自我总结和反思的过程,中间有些地方是个人的一些想法和理解,如果有什么不正确的,欢迎大家留言讨论。

  通常,我们在玩一款游戏的时候,最直接面对的玩法,就是这款游戏的战斗系统。由于游戏的分类实在太多,对应的战斗玩法也各有其特色。而我目前参与研发的游戏,主要是RTS游戏和MMORPG游戏两种类型,所以我的随笔就记录一下MMORPG游戏的战斗系统的一下设计笔记。

2016年属于MMORPG爆发的一年,多款MMO手游均取得不错的运营业绩,2017,依然属于主流的手游研发类型。在MMORPG游戏中,目前主流的战斗系统可以分为2类:回合制战斗和即时制战斗。回合制游戏的代表,《梦幻西游》,堪称经典,网易对于这款端游转手游的游戏也是用心研发和运营。即时制战斗的代表,《剑侠》,《齐天大圣》,资料片流出的《剑网三手游》等,都有不错的即时制战斗体验。

  虽然很多人对于MMO游戏的理解,主要在系统玩法和社交体验上,大部分玩家进游戏后的战斗都是开启自动挂机的战斗,相对于MOBA游戏,不注重战斗体验。不过剥离出游戏的类型,整个游戏的战斗系统其实属于一个相对独立的模块,而且是整个游戏的核心部分,所以掌握理解了战斗系统,对于大部分的游戏可以有一个相对深入的理解。本文就从一个小白的角度去理解隐藏在背后的即时制战斗系统是如何执行的。

  战斗系统的组成

从小白的角度理解,战斗系统,可以分为:按键响应,技能获取,寻敌检测,技能释放,伤害计算,战斗表现,总共6个大的部分,下面我逐个分析其中的一些执行逻辑。

一、按键响应

  在进入游戏后,在游戏的界面上,可以看到一个左侧的摇杆,右侧都会有一个当前职业的技能控制按钮。这在MMORPG和MOBA游戏中,属于比较常见的设计。我们在操作游戏角色进行战斗的时候,可以点击右侧的技能按钮,从而释放技能进行战斗。从技能按钮点击,到执行战斗,第一步就是按钮响应。

在玩家进入游戏后,就会在游戏模块中打开当前角色对应的技能界面,同时对玩家的点击按钮添加一个事件监听。如果你对事件监听不是很了解,直白的说,就是A添加一个attention,该attention是关注B是否发生,当B发生的时候,B广播其发生,这时候A接收到B发生了,则执行B发生时A应该执行的一些操作。这样的一个直白解释,就是常见的监听系统的设计过程。这样当玩家点击技能按钮X的时候,技能界面会读取其对应的技能指代,然后将其广播出去。在前面监听的部分,在收到该事件后,就会执行技能获取操作,从而传递到后面的部分。

二、技能获取

  现在执行到第二步,这时候已经知道玩家点击了某个对应的技能,但是具体是什么技能,还需要进行一系列的操作才能获取到。首先,游戏中,会有不同的职业,不同的职业会有不同的技能配置。所以首先是需要找到当前职业对应的技能。怎么获取呢?在MMORPG游戏中,对于不同的职业,会开发对应的技能组件SkillCpnt。在每个职业角色的实例上,挂载一个技能释放器SkillCaster。这个技能释放器SkillCaster,就是用来执行技能的读取和释放的主要角色。那么它在响应技能按钮点击后,会获取当前玩家具体的技能组件SkillCpnt, 在当前技能组件SkillCpnt中,获取当前技能对应的技能配置。通常,一个技能按钮,会对应的配置一个或者多个技能,这时候需要检测技能的对应释放顺序,同时需要检测当前技能的CD和消耗等。在获取到可以释放的技能后,接下来就需要进行技能的释放了。技能释放的第一步,就是寻找攻击目标。

三、寻敌检测

  在读取到技能后,接下来就是要找到可以攻击的目标。首先,会获取当前技能范围内的所有目标,然后进行检测。首先,检测其是否有效,然后检测是否属于当前技能攻击的类型(比如有的技能打人,有的技能打建筑),然后判断是否是敌人类型(不同玩法对于敌人类型的判断不一致,需要具体设计),是否在攻击范围内,在这个检测中,通常策划会进行一系列规则扩展,最后得到是一个繁琐的检测过程。对于这样的扩展,程序只能尽量保证扩展性和鲁棒性,同时对于某些特定的检测,尽量写入特定的玩法,避免影响公共检测的性能。

  在这儿,需要补充一下,对于游戏中的角色,主要分为两类:玩家和怪物。所以,对于这两类角色的技能检测,可以分为两种不同的方式进行检测的,这样可以尽量保证各自的规则设计,避免耦合和繁琐。

四、技能释放

  相对于前面三步操作,技能释放的流程就比较简单,在完成寻敌检测后,此时已经知道当前主角要用什么技能,对着什么目标进行释放了,所以通过技能释放协议,将相关的信息传递到服务器,服务器会收到当前释放技能的请求,然后进行技能校验,主要是检验技能是否处于CD,技能消耗是否足够,攻击对象是否有效等检测,如果通过,则下发给客户端做技能表现。同乘为了提高用户体验,在本地玩家自身的客户端,其释放的技能,是先做技能释放,同时传递给服务器技能释放的请求,如果通过则直接继续,如果不通过,则打断播出的技能动作。这样的设计流程,是为了避免在网络不好时,技能响应过程太慢,玩家点击时没有及时的响应,用户体验太差。

五、伤害计算

  伤害计算的过程,属于偏向数学计算的过程,如果从小白的角度理解,其基本的流程可以分为:技能更新,伤害寻敌,伤害计算,伤害结果这4个步骤。首先是技能更新,在打出当前技能后,并不是立即生效的,在配合着动画和特效,会有一个更新时间间隔,当更新完后,就会进行伤害检测(通常这个过程称为子物体更新的过程)。完成子物体的更新后,接着就是伤害计算,首先需要根据规则找到当前子物体周围配置范围内的物体,做一次寻敌检测。这个检测的过程,其实就是我们常见的技能特效模型检测,比如直线检测,圆弧检测,圆形检测,矩形检测,这四种基本最常见的检测。通过这四种对应的检测可以获得一个可以攻击的目标对象列表,然后逐个计算其对应的伤害。具体的伤害计算,需要根据数值的伤害计算公式,读取攻击者和被攻击者的相关属性完成对应的伤害值计算。在得到一个伤害结果后,就会进行扣血的操作,然后下发相应的数据结果给客户端。

六、战斗表现

  最后的战斗表现,是一个归纳的过程,包括技能释放角色的战斗动作和特效,被攻击者的战斗动作和特效,已经相应的UI数据展示等。这样的战斗表现,都可以用对应的技能控制器来实现,特定的技能控制器,在设置后会进行自更新,然后触发对应的动作播放,在动作播放中会触发播放对应的特效。基于这样的基本设计,就可以实现整个战斗的动作和特效播放。

  写到这儿,我又要再现我的灵魂画法了,将整个过程归纳为一个草图,哈哈:

  

  好了,对于整个战斗流程,从小白的角度做了一个大概的讲解,后续我会接着做一些战斗系统相关的文章分析,比如寻路,行为树,AI,组件设计等,下篇文章见~

MMORPG战斗系统随笔(一)的更多相关文章

  1. MMORPG战斗系统随笔(一)、战斗系统流程简介

    前言 转载请标明出处http://www.cnblogs.com/zblade/ 很久没有更新博客,中间迁移过一次博客,后来一直忙于项目的开发,忙的晚上回去没时间写博客,周日又要自我调整一下,所以空闲 ...

  2. MMORPG战斗系统随笔(二)、浅谈场寻路Flow Field PathFinding算法

    转载请标明出处http://www.cnblogs.com/zblade/ 今天给大家带来一篇游戏中寻路算法的博客.去年,我加入一款RTS的游戏项目,负责开发其中的战斗系统,战斗系统的相关知识,属于游 ...

  3. MMORPG战斗系统随笔(三)、AI系统简介

    在设计一款游戏的时候,如果我们是玩家,是希望自己能够操作角色畅玩游戏的.在一款MMORPG游戏中,大部分的实际游戏角色,是需要玩家来操作的,通过在游戏大世界相互完成游戏中的任务等等来体验游戏.在大世界 ...

  4. MMORPG战斗系统随笔(四)、优化客户端游戏性能

    转载请标明出处http://www.cnblogs.com/zblade/ 说到游戏性能,这是一个永恒的话题.在游戏开发的过程中,性能问题一直是我们研发需要关注的一个节点.当然,说句客观话,很多程序员 ...

  5. 表演的艺术,妖尾回合制战斗系统客户端设计[Unity]

    妖尾历经几年开发,终于在今年6月底顺利上线,笔者从2017年初参与开发,主要负责妖尾战斗系统开发.战斗作为游戏的核心玩法系统,涉及很多技术点,希望能借几篇文字,系统性总结MMORPG战斗系统的开发经验 ...

  6. 记录战斗记录你,详解妖尾战斗录像系统[Unity]

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  7. mmorpg手游中的战斗系统

    目前的项目是一款mmorpg手游, 非常不幸的是,当前战斗系统的实现非常脆弱, 也毫无技巧可言.具体存在如下问题: 1.战斗层逻辑与自动战斗AI逻辑混在一起, 互相纠缠. 2.战斗层自身逻辑混乱不堪, ...

  8. 【转】MMORPG游戏服务器技能系统设计:表格字段与技能程序框架

    本文主要从一个程序员的角度阐述一下mmorpg服务器技能系统的程序框架设计,最近在做这个,就当做一个总结吧,其中某些概念可能没有解释清楚,欢迎大家拍砖讨论~ 技能其实是战斗系统的一个组成部分,战斗基本 ...

  9. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

随机推荐

  1. 通俗语言解释内外网IP与端口映射

    IP:分为外网IP和内网IP 也就是我们说的外网IP属于实体IP 实体IP,它是独一无二的,在网络的世界里,每一部计算机的都有他的位置,一个 IP 就好似一个门牌!例如,你要去百度的网站的话,就要去『 ...

  2. 深度解析C++拷贝构造函数

    自2003年开始,断断续续用了12年C++,直到这两年做物联网嵌入式开发,感觉对C++的掌握仅有10%左右.习惯了C#开发,C++倒显得难以下手!今天就一个函数返回问题跟辉月兄弟讨论一番,大有所获,足 ...

  3. 计算机程序的思维逻辑 (95) - Java 8的日期和时间API

    ​本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和 ...

  4. v-cloak 实现vue实例未编译完前不显示

    前言: 由于网速原因,(ps:之前同事无意间在网速很差的情况下测出的)在使用vue开发时,会由于vue实例还没编译成功的时候数据绑定的"Mustache"标签会闪现一下,造成不好的 ...

  5. hdu 6068--Classic Quotation(kmp+DP)

    题目链接 Problem Description When online chatting, we can save what somebody said to form his ''Classic ...

  6. pip 警告!The default format will switch to columns in the future

    pip警告! DEPRECATION: The default format will switch to columns in the future. You can use --format=(l ...

  7. 第3阶段——内核启动分析之make menuconfig内核配置(2)

    目标: 分析make menuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置: (1)通过make menuconfig 直接从头到尾配置.config文件 (2) 通过m ...

  8. 转:【Java集合源码剖析】Java集合框架

    转载轻注明出处:http://blog.csdn.net/ns_code/article/details/35564663   Java集合工具包位于Java.util包下,包含了很多常用的数据结构, ...

  9. Node.js中Async详解:流程控制

    安装 npm install async --save 地址 https://github.com/caolan/async Async的内容主要分为三部分 流程控制: 简化九种常见的流程的处理 集合 ...

  10. 【Alpha阶段】第四次scrum meeting

    一.会议照片 二.会议内容 姓名 学号 负责模块 昨日任务完成度 今日任务 杨爱清 099 界面设计和交互功能 完成 百度合适的背景图片 杨立鑫 100 数据库搭建和其他 完成 开始编辑数据库 林 钊 ...