【UE 从零开始制作坦克】10-炮弹溅射伤害

目录

一、解决炮弹穿过坦克炮塔问题

二、炮弹溅射伤害

效果


一、解决炮弹穿过坦克炮塔问题

打开“PHYS_West_Tank_M1A1Abrams”这个物理资产

【UE 从零开始制作坦克】10-炮弹溅射伤害_第1张图片

造成这种现象的原因是,炮弹只会与如下紫色区域产生碰撞事件【UE 从零开始制作坦克】10-炮弹溅射伤害_第2张图片

 选中坦克炮塔的骨骼

【UE 从零开始制作坦克】10-炮弹溅射伤害_第3张图片

 添加盒体外形

【UE 从零开始制作坦克】10-炮弹溅射伤害_第4张图片

 缩放盒体外形使其包裹住炮塔

【UE 从零开始制作坦克】10-炮弹溅射伤害_第5张图片

 再选中炮管的骨骼

【UE 从零开始制作坦克】10-炮弹溅射伤害_第6张图片

 添加一个胶囊体外形(注意不要覆盖炮口处,因为炮弹会从炮口处生成,如果外形覆盖炮口,那么炮弹生成后就会立刻爆炸)

【UE 从零开始制作坦克】10-炮弹溅射伤害_第7张图片

此时运行游戏发现炮塔、炮管会全部从坦克上掉落分离,这是因为“TankZongLei”的父类——轮式载具类,开启了网格体的模拟物理。

我们需要将炮塔和炮管的物理外形中的物理类型设置为运动学

【UE 从零开始制作坦克】10-炮弹溅射伤害_第8张图片【UE 从零开始制作坦克】10-炮弹溅射伤害_第9张图片

 此时运行游戏攻击坦克炮塔和炮管也会检测到炮弹。

二、炮弹溅射伤害

主要通过“应用放射状伤害”节点实现。其中,“Base Damage”引脚表示爆炸中心的伤害值,“Origin”表示中心点位置,“Damage Radius”表示爆炸半径(单位:cm),“Damage Causer”表示造成伤害的对象,“Instigated by Controller”表示造成伤害的控制器,“Do Full Damage”表示爆炸范围内是否存在伤害衰减(离爆炸中心越远伤害越低),“Damage Prevention Channel”表示可以阻挡爆炸的碰撞类型,可视性表示只要能阻挡可视性通道的碰撞,都会阻挡伤害。

【UE 从零开始制作坦克】10-炮弹溅射伤害_第10张图片 

 打开“TankShell”(坦克炮弹蓝图)

【UE 从零开始制作坦克】10-炮弹溅射伤害_第11张图片

 添加一个变量命名为“DamageByWhichController”,表示发射此炮弹的控制器(玩家控制器或AI控制器),变量类型为控制器的对象引用。

 【UE 从零开始制作坦克】10-炮弹溅射伤害_第12张图片

 打开“BP_West_Tank_M1A1Abrams”

【UE 从零开始制作坦克】10-炮弹溅射伤害_第13张图片

 找到“从类生成Actor”节点

【UE 从零开始制作坦克】10-炮弹溅射伤害_第14张图片

 可以发现多了一个“DamageByWhichController”引脚,如果没有的话可以尝试刷新节点并查看创建变量时是否勾选了可编辑实例和生成时公开

【UE 从零开始制作坦克】10-炮弹溅射伤害_第15张图片

 添加“获取控制器”节点,如果控制坦克的是玩家,则获取的是玩家控制器,如果控制坦克的是AI,就会获取AI控制器。我们通过“获取控制器”节点向“DamageByWhichController”引脚传入控制器,给“TankShell”(坦克炮弹蓝图)中的变量“DamageByWhichController”赋值。

【UE 从零开始制作坦克】10-炮弹溅射伤害_第16张图片

 打开“TankShell”,添加如下节点,使得炮弹能够造成放射状伤害

【UE 从零开始制作坦克】10-炮弹溅射伤害_第17张图片

【UE 从零开始制作坦克】10-炮弹溅射伤害_第18张图片

 打开“TankZongLei”,将如下选中的节点折叠到函数

【UE 从零开始制作坦克】10-炮弹溅射伤害_第19张图片

 折叠的函数重命名为“GetDamage”

【UE 从零开始制作坦克】10-炮弹溅射伤害_第20张图片

 函数设为私有

【UE 从零开始制作坦克】10-炮弹溅射伤害_第21张图片

 复制一份“GetDamage”函数给到收到放射状伤害时执行的逻辑

【UE 从零开始制作坦克】10-炮弹溅射伤害_第22张图片

 为了测试溅射伤害是否有效,我们可以打印输出一下坦克当前的血量。

效果

 最终效果如下:

可以看到不论是攻击坦克炮塔还是攻击坦克附近都会对坦克造成伤害。

你可能感兴趣的:(#,虚幻4,载具,虚幻4,UE)