广义的的说,和战斗结算相关的内容都算技能系统,包括技能信息管理、技能调用接口、技能目标查找、技能表现、技能结算、伤害结算、buf/法术场模块管理,此外还涉及的模块包括:AI模块(技能调用者)、动作模块、寻路/移动模块以及人物属性和伤害结算。

先说下技能模块每个部分的职责和原理:

技能信息管理:管理unit所拥有的技能以及技能的等级、cd等。

技能调用接口:AI或者UI操作触发技能,触发技能时可能选择了一个目标(AI),也可能并没有目标。

技能流程管理:一个技能可能由多个子技能以移动的执行模式组合而成,而每一个最终执行的技能执行过程也存在一个流程,一般包括:前摇过程-结算点-后摇过程。技能在前摇结束时进入技能真正的结算流程,结算流程可能创建子弹,也可能触发buf或者创建法术场。

技能目标查找:若技能触发时已经设置了技能目标unit,则直接将其作为目标unit,否则需要根据一定的策略选择。此外,技能释放的时候还需要释放方向和释放位置等信息,也在这个模块获取。

技能表现:技能释放过程中,需要创建相应的特效以及执行相应的动作。

buf/弹道/法术场管理:buf挂在unit身上,可能影响unit的一些行为和状态;法术场一般由场景管理,影响场景中某范围内的unit。弹道就是技能创建的一个子弹,这个子弹可能以不同的路线移动(直线/抛物线/直接命中等)

0技能表

首先说下实现技能的基本思路。实现技能的基本思路就是通过策划填写表格,来配制成某些技能,在执行某个技能的时候,分别去根据这些表格中的内容,确定技能如何表现。基本的逻辑是:

  1. if skillTable.get("技能动作"):
  2. paly 动作
  3. if skillTable.get("特效"):
  4. 播放特效
  5. if skillTable.get("法术场"):
  6. 创建法术场
  7. ....

复制代码

1 技能信息管理

unit创建时,此模块管理unit可使用哪些技能,比如游戏中玩家可以选择使用哪些技能。

游戏中技能的升级、技能加点、技能池管理都在这个模块。

此处包括处理技能升级/附文/装备等外部模块对技能参数的修改。

2 技能调用接口

提供技能调用的接口供AI调用,调用时可以提供一个目标unit,也可以不提供让技能自己查找。

提供三个接口:

技能开始:开始执行技能,若技能不循环进行,则技能可以自动结束。

技能结束:有的技能不能自己结束,比如某些循环技能。当玩家松开按钮,卖手机游戏账号调用技能结束接口,告诉当前技能使其结束,此时技能到达后摇点时,技能不再继续执行。

技能停止:当技能被强制打断时,如被攻击、晕眩等,技能会被强制停止。

此外,当前一个技能正在执行时新的技能调用启动,此时新的技能调用信息会被保存。一般来说,并不会把所有新的技能调用信息保存下来,那样就成了一个技能执行的序列。我们游戏仅保存一个新的技能调用信息。

3 技能流程管理

技能流程这里分两点讨论:

一个技能可能由多个子技能以一定的模式组合起来。

一个技能常常由多个子技能以一定的模式组合而成,比如三段击、比如冲锋斩(先冲锋、后斩)等,甚至还存在根据不同的环境选择执行不同的子技能。分析发现,技能可以分成一个树形结构,这个树形结构非常类似行为树,同样可以将节点分为控制节点和执行节点,甚至可以包括condition节点。为此,我们项目引入一个技能树概念来描述这种数据结构。

一个具体的技能(技能树执行节点)也有一个固定的执行流程。这个流程一般为:前摇过程、前摇过程结束=技能结算时间点、后摇时间点。

3.1 技能树

技能树参考传统行为树的设计,使用树形结构控制技能的执行流程。

技能树和行为树在结构上比较类似,但是在运行逻辑上有很大的不同。

首先,技能树的重点并不是根据上下文选择一个合适的节点执行,而是以一定的策略将技能树从头到尾遍历执行一遍。

其次,技能树没有tick的概念,而是基于回调的,比如一个顺序节点,顺序节点中一个子节点执行完毕后,马上通知顺序节点,顺序节点执行下一个子节点,直至顺序节点的最后一个子节点执行完毕,顺序节点就会通知父节点(如果有)它已经执行完毕。

此外,为了完成技能的一些需求,控制节点往往存储更多的控制信息来控制子节点的执行流程。具体的信息根据策划需求设置,比如顺序结点包括原子属性和循环属性。如果一个顺序节点具有原子属性,则这个顺树节点在执行的过程中并不会被end,只有全部子节点执行结束才可以end。

3.2 执行节点的技能流程

一般来说,技能的执行流程包括:

前摇时间:技能开始,但是技能真正的结算流程还没开始。技能开始以后,机能相关的特效和动作就开始播放。

前摇时间结束:技能前摇结束时技能开始真正的释放以及结算,等技能前摇结束以后,技能真正的释放并结算。释放包括创建相应的弹道/法术场和buff。

技能后摇点:技能播放到后摇点时间时,技能真正的结束。这时,技能对应的特效以及人物动作可能还会继续播放,但是技能流程已经正式结束了。也就是说,下一个技能可以执行。

4 技能目标查找

技能释放时,目标可能已经由AI传给了技能模块,也有可能没有一个目标,如玩家控制单位。

技能在释放法术场、弹道的时候,重要的是技能的方向而不是技能目标一般来说,技能获得一个目标对象以后,技能的方向就是释法者到目标的向量。

此外,技能方向可能需要一些配置,如前摇锁定(前摇过程中目标移动,技能方向不变),UI可控制(技能释放过程中,玩家可以通过控制UI控制技能的释放方向)。

5技能表现

技能的表现包括动作、特效、shader、音效等。其中,特效比较复杂,需要配置的内容也比较多。比如,有些特效挂在模型上,有的特效挂在场景里。对于法术场的特效,分别可以分为法术场开始、结算、结束特效,分别在法术场开始时、结算时、结束时显示。对于buff也类似。

6 弹道、法术场和buff等技能创生体

狭义的来说,技能模块只是负责技能的执行流程(技能树管理以及技能流程管理),而技能真正的结算主要是由其创生体结算的。当技能前摇结束开始生效时,技能创建相应的弹道和法术场,法术场弹道击中敌人时又有可能产生相应的buff。

一般来说,法术场是一个场景的某块检测区域,每隔一段时间法术场检测此区域的敌人,并对其攻击结算。

弹道是一类子弹移动路径的抽象,创建一个弹道就表示一个子弹特效沿这个弹道移动并检测路径上的敌人。

buff就是挂在单位身上的一个具有持续时间的状态,状态对单位产生一些正面或者负面的影响,并且在此段时间内,每隔一段时间进行一次伤害结算 。

对于技能、发舒畅、buff之间的功能界定并不是很固定,比如技能能否直接对单位造成伤害,法术场能否对单位造成伤害,甚至技能只能创建法术场,法术场只能检测目标不能造成伤害,只能挂buff,而所有的伤害都是通过buff来结算。当然,这样并不一定好,一般来说,技能和法术场也可以对单位造成伤害。

功能的界定需要根据策划需求调整。

游戏编程干货:游戏技能系统全解析相关推荐

  1. Java电商平台-电商订单系统全解析

    说明:Java电商平台-电商订单系统全解析主要讲解OMS的内容,设计,开发,架构等知识 今天分享将会分为以下三个环节来阐述: 1.订单系统的介绍 2.订单系统的解构 3.垂直电商订单系统设计思路 一. ...

  2. 学习计算机游戏编程,在线游戏学编程,游戏编程汇总

    21世纪必备技能中,计算机成了现在流行的热门课程,今天小编给大家介绍了一些和游戏结合的编程学习平台,让大家对这门枯燥乏味的编程学习尽量变得有趣.下面介绍的游戏编程中有适合作为入门的编程游戏,还有些可能 ...

  3. 废话中的极品废话 单反对焦系统全解析

    前言 测光的问题在不久前刚刚讨论完(参见:<明白的糊涂账 各家单反测光系统全解析>),接下来轮到对焦了! 对焦!我们同样用愉快的方式解决这个问题,首先我们要确定两点,第一,这篇文章不会太深 ...

  4. 剑灵洪门崛起服务器状态,这是你的洪门!《剑灵洪门崛起》门派系统全解析

    四海相知皆兄弟,五湖同舟若比邻,作为<剑灵洪门崛起>游戏内重要的社交玩法之一,门派系统为玩家搭建了一个一个避风的港湾.休憩的家园,进入门派就等同于进入一个大家庭,可以相互交流分享.互助互利 ...

  5. Google Summer of Code谷歌编程之夏活动流程全解析(上)

    本期由尔等同学来对话Casbin罗杨老师,为大家介绍开源及GSoC活动流程. > 罗杨:GSoC 2013.2015学生.GSoC期间在Nmap开源社区作为主力开发了Windows平台网络抓包工 ...

  6. 航芯案例分享 | 驾驶员监控系统全解析 为驾驶安全护航

    考虑到道路上的汽车数量不断增加,对 ADAS(高级驾驶辅助系统)需求的不断增长可能不足为奇! 大多数驾驶员因在驾驶时分心而遭遇事故,尤其是在夜间,所以许多汽车制造商都在提供驾驶员监控系统,增进道路安全 ...

  7. python游戏编程快速上手pdf_Python游戏编程快速上手 (斯维加特著) 中文pdf完整版[18MB]...

    Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言.Python游戏编程快速上手通过编写一个个小巧.有趣的游戏来教授Python编程,并且采用直接展示了游戏 ...

  8. python游戏编程书_Python游戏编程快速上手 第4版 (斯维加特著) 中文pdf扫描版[41MB]...

    Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. Python游戏编程快速上手 (第4版)通过编写一个个小巧.有趣的游戏来教授Python编程,并且采用 ...

  9. Python游戏编程快速上手pdf

    下载地址:网盘下载 内容简介  · · · · · · Python是一种高级程序设计语言,因其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言. 本书通过编写一个个小巧.有趣的游戏来教授Pyt ...

最新文章

  1. 【杠精】问卷星防切屏解除方法-解除问卷星平台模拟考试防作弊切屏和最大化全屏的方法
  2. 【数据库】mysql移植
  3. 一系列视频教程 收藏
  4. POJ 1430 Binary Stirling Numbers (第二类斯特林数、组合计数)
  5. 基于Walle的多渠道快速打包自动脚本
  6. Quest Spotlight On Oracle 很牛的监控软件
  7. Windows Server 笔记之备份与灾难恢复
  8. 关于压缩工具 7z(7-zip) 如何创建自释放档案(选项 -sfx 的解读)
  9. 输出浮点数(信息学奥赛一本通-T1027)
  10. 定位插件_谷歌官方发布了一款全新超实用Chrome插件,支持国内使用!
  11. 解决 Linux 性能问题的前 60 秒
  12. HDU2001 计算两点间的距离【入门】
  13. Bailian2729 求12以内n的阶乘 Bailian2730 求20以内n的阶乘【递推】
  14. ThinkPHP5.0-多语言切换
  15. 【PHP 跨域问题】
  16. 报名丨2017 GrowingIO 增长大会(北京)
  17. 托宾Q数据-沪深A股上市公司(含行业名称、代码等指标)2003-2020
  18. EJS + Express基本使用
  19. POI删除Excel中数据有效性
  20. 笔记本驱动图标消失怎么办

热门文章

  1. 敏捷价值_您是否忘记了敏捷价值?
  2. 输出数字金字塔(数字1-9)
  3. asp.net+sqlserver房屋中介管理信息系统
  4. 锁相环 CD4046 的应用
  5. php简洁版雪花算法Snowflake
  6. mysql中进行数据分析_SQL数据分析(一)
  7. 深度剖析原理!宅家36天咸鱼翻身入职腾讯,分享PDF高清版
  8. 致敬大师 | 你敲出的代码,幸福了我的整个童年
  9. supersocket client 固定端口_西门子CPU控制器1512P-1PN端口交换机附件200KB
  10. 机原自检——第8章 连杆机构及其设计