UE4_攻击伤害3_受击伤害 喷血 倒地死亡
攻击在不同部位伤害应该是不一样的,比如把人分为 头、胸、腹、胳膊腿等。
之前做了一个简易的判断,只是判断是否打在了头上,这次用宏全做出来。
喷血
首先判断是否打在了胳膊上。输入的name变量是骨骼名称。
找到AI的骨骼,找到手臂骨骼的名称s。(手指就不算了,大臂、小臂、手)
把这几个都判断一下
复制一份,做腿的
先找腿的骨骼名称
复制之后修改里面的骨骼名
再来一个重要部位检测(包括头、脖子、脊柱01 02、屁股)
把后面的播放受击动画合成为一个宏或者函数
记得在输入里面添加一个exec。
把骨骼名称和攻击方向提升为变量,方便操作
测试,没有问题
新建一个关于伤害计算和喷血部位的函数,take damage
bone name 传入骨骼名称,用于判断出血位置
damage 伤害量
damage X 伤害倍数
右键输入math,可以自定义一个数学公式,直接在名称里输入就行。
比如我们修改公式的名称为A*B,打开该公式就是这样的
新建两个变量,护甲AP和血量HP。
计算方式,借鉴lol的伤害计算公式,实际伤害=面板伤害*(100/100+实际护甲)。
实际护甲=面板护甲*(1-护甲穿透百分比)-实际穿甲值。
当然先不做穿甲的事,先只考虑伤害和护甲值。至于穿甲、暴击bulabula 以后有空在做。
所以,HP=HP-Damage*(100/100+AP)
然后播放喷血动画
用 spawn emitter attached
骨骼就是我们输入的骨骼,mesh就是从左上角拖出来的mesh,emitter template 拖到输入里,在外面改。
以攻击手臂为例
这是要添加的喷血动画
大概是这样,感觉喷血量有点多
然后就是调整出血的动画,也可以跟之前一样用一个 随机的布尔值进行select
多试试看哪个效果好,没啥好说的
然后加上AI往后退的动画,直接加在take damage后面就行。
做了一点调整,把damage*damage X直接输入了Play Damage Anim,作为判断是否是重击的伤害量
死亡与肢解
死亡
比较HP与0,如果大于0正常播放,小于等于0就先播放受击动画,再返回一个布尔值,代表死亡。
如果 is dead 为true ,在随机0.2-0.7s的延迟后,开启“布娃娃” 物理模拟。
“布娃娃”就是系统模拟的,带物理重力的一个东西,比如下面这个摊在地上,其实就是因为AI模型本身的重力导致的。
受击动画的进一步修改,加入持续流血的效果
如果伤害>=80,播放被击倒的动画,必定流血
如果伤害<80,>=40,有几率流血
用event tick检测,如果在流血,就播放持续流血的动画
5s之内没有受到伤害,就停止流血。
断肢
也可以用个随机布尔值,做概率断肢