游戏思考系列02:技能伤害计算流程(不涉及buff)

本文介绍了游戏开发中技能伤害计算与特效表现的分离原理,通过LOL日炎灼烧效果为例,详细阐述了技能施法的四个阶段,包括客户端与服务器的同步机制,以及为何要将逻辑和表现分离。分离后的好处包括代码清晰、断线重连更容易。同时,文章也提到了不分离的情况以及碰撞检测在伤害计算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


抱歉这里没代码或比较少,因为工作都是很晚回来,现在写的时候都是晚上11点54了

一、题外话:

1)技能伤害和特效表现的分离

  • 说明

技能伤害的特效表现和数值基本是分离,也就是说有特效并不一定伤害计算就打出来,比如说你比较卡的时候,虽然施法表现已经完成结束,但是没有伤害,或伤害很久才同步下来(也有为了战斗手感才会先让客户端表现效果),更白话的解释:特效和动作是一件事儿,伤害计算 和冒数字是另一件事儿。只不过,当角色放技能的时候,这两件事一起发生而已。

  • 好处
1)代码清晰,解耦(比如炉石大家肯定都玩过吧,你可以连续出几张牌然后点结束回合,等着动画序列慢慢播。
从这就可以看出来,炉石是做了逻辑层和显示层的分离)
2)断线重连好做,把数据拿到了刷新显示就可以

二、流程(举例:逻辑和业务分开:技能可以分为四个阶段)

举例:LOL日炎灼烧效果,每0.5s产生一次伤害

1)客户端开始施法,技能前摇。此时通知服务器同步进入施法流程

具体:判断角色是否可以释放这个技能(比如死没死,有没有升级成神话大日炎,有没有被奥恩强化过,是否卖了这个装备)

2)客户端开始分段施法,每一阶段都要和服务器做同步。主要是为了防外挂,比如一些穿墙挂、瞬移挂等。

具体:客户端播放特效,开始计时,在动作和特效约好的时间到来时,播放特效,开始计时

3)在施法过程中或者施法结束的时候,服务器进行同步的伤害计算发送给客户端,然后客户端显示一些伤害的效果和伤害的数字等

具体:在特效和你约定好的时间到来时,开始造成伤害

(1)穿日炎的英雄旁边有小兵、野怪或对面英雄,每次伤害间隔0.5s
(2)每次造成伤害进行如下判断
①判断范围内有没有单位
②单位是否死亡
③单位和玩家的阵营关系
④判断敌对单位是否可被锁定(就是可以被角色攻击吗,是不是在无敌状态),
something else
(3)根据双方的即时属性计算瞬间伤害

4)施法结束,客户端和服务器同步

服务器计算好伤害,传给客户端,客户端显示被击特效、伤害数字UI、被击音效等

三、补充

1)这里客户端不需要每一帧和服务器同步,只需要再某些关键帧的时候同步这些数据就可以了

四、不分离表现和逻辑分开的流程

1)用美术资源碰撞的方式判断伤害的造成

2)那就是碰撞后开始计算伤害,也就是上面的第3)步

3)并且,为了避免未来优化导致特效资源修改,建议碰撞块单独做,不要用特效粒子本身来做

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值