MMORPG战斗系统随笔(一)、战斗系统流程简介
前言
转载请标明出处http://www.cnblogs.com/zblade/
很久没有更新博客,中间迁移过一次博客,后来一直忙于项目的开发,忙的晚上回去没时间写博客,周日又要自我调整一下,所以空闲了很久没有继续写博客。最近终于慢慢放慢节奏,项目也快上线了,可以有空写一些个人的笔记。准备写一个战斗系统的入门笔记,也算一个自我总结和反思的过程,中间有些地方是个人的一些想法和理解,如果有什么不正确的,欢迎大家留言讨论。
通常,我们在玩一款游戏的时候,最直接面对的玩法,就是这款游戏的战斗系统。由于游戏的分类实在太多,对应的战斗玩法也各有其特色。而我目前参与研发的游戏,主要是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战斗系统随笔(一)、战斗系统流程简介的更多相关文章
- gitlab工作流程简介
gitlab工作流程简介 新建项目流程 创建/导入项目 可以选择导入github.bitbucket项目,也可以新建空白项目,还可以从SVN导入项目 建议选择private等级 初始化项目 1.本地克 ...
- HTTP请求流程(一)----流程简介
最近一直在研究如何让asp.net实现上传大文件的功能,所以都没怎么写技术类的文章了.可惜的是至今还没研究出来,惭愧~~~.不过因为这样,也了解了一下http消息请求的大致过程.我就先简单介绍下,然后 ...
- [转】:HTTP请求流程(一)----流程简介
http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html HTTP请求流程(一)----流程简介 最近一直在研究如何让asp.net实 ...
- FFmpeg编解码处理1-转码全流程简介
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584901.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...
- MMORPG战斗系统随笔(三)、AI系统简介
在设计一款游戏的时候,如果我们是玩家,是希望自己能够操作角色畅玩游戏的.在一款MMORPG游戏中,大部分的实际游戏角色,是需要玩家来操作的,通过在游戏大世界相互完成游戏中的任务等等来体验游戏.在大世界 ...
- MMORPG战斗系统随笔(一)
前言 很久没有更新博客,中间迁移过一次博客,后来一直忙于项目的开发,忙的晚上回去没时间写博客,周日又要自我调整一下,所以空闲了很久没有继续写博客.最近终于慢慢放慢节奏,项目也快上线了,可以有空写一些个 ...
- MMORPG战斗系统随笔(二)、浅谈场寻路Flow Field PathFinding算法
转载请标明出处http://www.cnblogs.com/zblade/ 今天给大家带来一篇游戏中寻路算法的博客.去年,我加入一款RTS的游戏项目,负责开发其中的战斗系统,战斗系统的相关知识,属于游 ...
- MMORPG战斗系统随笔(四)、优化客户端游戏性能
转载请标明出处http://www.cnblogs.com/zblade/ 说到游戏性能,这是一个永恒的话题.在游戏开发的过程中,性能问题一直是我们研发需要关注的一个节点.当然,说句客观话,很多程序员 ...
- 【Android 系统开发】 Android 系统启动流程简介
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...
随机推荐
- JAVA微信支付~
1,简单说明 现在好多项目上都需要用到微信支付接口,官方文档上也是简单的描述了下,技术不高深的真的难以理解(我自己看官方文档就看不懂),还是需要自己收集,总结, 网上看了好多 有些照着弄最后还是没法成 ...
- WebAPI之DOM和BOM
API是什么? Application Programming Interface:应用程序编程接口,是一些预先定义的函数,通俗的理解就是一些方法. WebAPI是什么? 浏览器提供的一套操作浏览器功 ...
- 移动端canvas文字图片合成并生成图片(canvas宽度自适应移动端屏幕)
这是我之前做的一个关于文字图片合成的代码,供大家参考,不足支出还望体谅:具体的注释在代码里都有,有什么不懂了可以留言互相交流.<!DOCTYPE html> <html lang=& ...
- Mac- appium 环境配置
一: 下载 appium : https://bitbucket.org/appium/appium.app/downloads/ 下载安装完,打开appium,安全性与隐私设置 检测提示: ...
- 配置Tomcat时遇到的问题
今天准备开始JavaWeb的学习,先配置tomcat,前期一切顺利,可当我打开startup.bat,访问localhost:8080时,却显示localhost 拒绝了我们的连接请求. 于是我开始在 ...
- Dev gridcontrol 添加多列按钮
gridcontrol中添加按钮的步骤: 1. 把列的ColumnEdit属性设置为RepositoryItemButtonEdit 2. 把TextEditStyle属性设置为HideTextEdi ...
- UE4杂记
一些学习UE4时的笔记,转载请注明出处. ☆ UE4逻辑 Actor 是由 AActor 类派生而来的类实例:能被放入游戏世界场景的所有游戏性对象的基础类.对象是继承自 UObject 类的类实例:虚 ...
- python之路(八)-迭代器&生成器
迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是 ...
- JSON Web Token(JWT)使用步骤说明
在JSON Web Token(JWT)原理和用法介绍中,我们了解了JSON Web Token的原理和用法的基本介绍.本文我们着重讲一下其使用的步骤: 一.JWT基本使用 Gradle下依赖 : c ...
- 每天学点SpringCloud(七):路由器和过滤器-Zuul
为什么要使用Zuul 先来看一下下方这个图 假如现在我们具有四个微服务,分别是用户.订单.支付.催收微服务,它们的调用方式分别是使用http.restful.thrift.kafka.这个时候如果我们 ...