目录
系统设计
部分节点详细介绍
1.固定时间节点:
主动技能和被动技能
技能系统在整个游戏的扩展:
技能强化的实现:
技能升级的实现:
打断的处理:
效果演示:
首先,说明一下,这个技能系统支持市面上绝大部分rpg类型的游戏的需求.可以是回合制,可以是即时制,可以有锁定,可以无锁定.
....
(个人重构多次. 精心研究.还是比较自信的)
受限于语言水平,可能很难完整表述整个设计思路和细节.所以有啥疑问的地方欢迎留言.
....
先直接谈这套技能框架的设计,整体而言比较简洁,优雅.方便,易懂.
首先看它的数据层结构(技能不同的阶段的处理,请看下面主动技能/被动技能部分):
这是简化了的模型,很简单,一看就容易理解.
技能是一套流程节点作为主干,所有的流程节点都有不同的作用. 有些流程节点下还可以附加一系列行为.
注意,这些都是数据层的东西,所以单独拿出来热更也没关系.(比如游戏的平衡性调整)
执行技能的时候,只需要根据解析好的这些数据,找到对应的执行逻辑,分发过去执行即可.
先介绍一下流程节点可能有的类型以及作用:
这些节点足以应付99.999% RPG游戏的需求. 不够了再根据项目需求增加即可.
该类型节点下会附属的所有行为,都是并行执行的,每个行为可以再单独设定一定的延时执行时间,方便实现各种效果. 如果你有极为特殊的需求,也可以创建一个树形的行为结构.
每个行为执行的时候,可以获得之前一些节点/行为的输出,比如方向,比如位置,比如目标等,作为自己的输入.
这样的行为可以有:
类似这样的行为数之不尽,要多少有多少.只要你的项目足够庞大.
注意行为彼此之间也是可能有交互的,比如:
篇幅有限,就不再举例了.
上述所有内容均基于技能使用条件都满足的情况下,事实上,我们还需要为这套技能系统添加一些额外的可激活条件(ActiveCondition).用以判断是否可以执行该技能.
这样的条件有:
主动技能和被动技能最大的区别就是角色是否主动使用. 因为如果将技能分为多个阶段的话.主动技能可以有3个:
1.输入检测阶段
2.技能执行阶段
3.效果结算阶段
而被动技能,就没有1,只有2和3了.
每个阶段,都是一些上面所介绍的节点的集合.所以,
一个主动技能,在输入检测阶段,你可以配置等待用户输入.然后根据一定的逻辑,来让技能中断(输入不合法/超时),或者是开始执行(进入2阶段).
而效果结算阶段的任意节点,可以由技能发射的飞行道具在碰撞时触发,也可以由"效果结算节点"触发.
这样做有一个潜在的游戏机制上的问题:
以守望先锋的法老之鹰为例:
法老之鹰的火箭弹发射之后,会对碰撞的目标造成xx伤害,碰撞点的一定范围内其他目标造成xx伤害. 当火箭弹即将对目标造成伤害之前,如果天使给法老之鹰连了蓝线(增加50%最终伤害,这枚火箭弹刚被发射出去的时候没有牵线),那么这个火箭弹的"效果结算",是以原伤害结算呢,还是以增加50%伤害后结算?
守望先锋在老版本的做法是以增加50%伤害来结算.这就是让效果结算节点中的伤害计算行为以默认方式运行(即以法老之鹰在计算时的属性为准). 新版本中的做法是以火箭弹发射出去的那一刻来结算.
另一个与之类似的例子是源氏开大之前安娜给激素和开大之后安娜给激素(伤害提升/受到伤害降低).这种就刚好用默认的方式即可.
可见.游戏中需要设计上支持这两种结算方式都可以被满足.
幸运的是,目前这套技能系统的设计可以完美支持.
解决方案: 发射飞行道具的时候做一个技能使用者的属性快照,在配置中,让效果结算中对应的伤害计算行为接收这个属性快照作为输入.
事实上,这套系统强行划分成如此多的行为.不仅仅是用在技能系统中.也可以用在装备/道具系统中.当然,很多行为在技能中所特有的属性,在装备/道具中是用不到的,反之同理.这种划分一个基础行为,然后分别继承就好了.
比如某个道具用了后,15秒内增加玩家5%攻击力,实际上就是触发一个"添加BUFF"的行为.
又比如一个装备,有一堆增加的属性不说,还带几个特效:
这种实际上就是给玩家增加一个被动技能.
在一些MMORPG游戏中,或者类似于暗黑这样的游戏中,技能拥有各种各样的强化,比如应用了强化A后,效果提升,应用了强化B后,技能范围加大等.
这些在这套技能系统中,可以通过设定流程节点/行为的开启/关闭来实现.
技能可能有很多个等级. 这个时候给对应的可能被技能等级的行为/Pipeline节点增加一些成长值即可.然后逻辑层在执行技能的逻辑时,根据技能等级处理一下就好.
实际上这个在技能逻辑执行中注意一下可以被取消的地方,然后做一些取消的处理就好了(正常是进入技能结束状态,武侠游戏可能还来一个内伤效果~).
比如已经发射的特效,肯定不可能被打断弄的发射一半的不执行吧. 而持续发射的特效,被打断了,后续的发射肯定不再继续了.
然后游戏可能允许技能被不同类型的输入打断,比如受到攻击就打断. 受到沉默就打断,受到物理技能封印就打断,受到强控制效果就打断(比如眩晕/定身/击飞等). 这个在受到伤害/对应效果的时候判定一下就好.
类似于霸体类的防打断效果. 应该先于技能被打断的处理计算.
这样一来基本就完事了.
说一千道一万,不如放视频演示实在.所以这里给出B站连接.
https://www.bilibili.com/video/av49728546
没有字幕.
中间的是带打断效果的技能, 后续测试的是2D物理系统模拟的3D检测效果.
该DEMO,还不完善,很多地方有问题,只是搭了一个架子. 以后有机会再继续修改. 目前只是为了实现这套设计思想.
客户端使用了Unity (2018.3.10) ,双端基于ET (5.0). 服务器是C#.
https://github.com/AnotherEnd15/ET-RPG-DEMO