UE4 攻击范围和技能制作

892 阅读3分钟

前言

  先讲讲绿圈和攻击范围怎么制作和绑定
  再粗略的讲讲人物和技能之间的绑定

正文

用材质做绿圈

效果

image.png

制作方法

image.png

RadialGradientExponential 就是提供一个实心圆
Lerp : from + (to - from) * t
这里B直接放0 就等于
圆圈A+(-圆圈A)*圆圈B_Alpha
最后拿颜色包装一下 

绑定到人物上

我会先弄个结构体把人物属性放到里面 方便以后调整

image.png

回到人物的EventBegin事件中 把结构体的数据赋值到里面

image.png

设置好我们的平面把材质赋值上去

image.png

image.png

默认平面是1M宽 所以这个圆半径就是0.5M
之后在EventBegin事件中做半径和人物攻击范围的绑定

image.png

这个除以50也是好理解的 因为攻击范围常指半径

A键出现攻击范围

需要在Playcontroller中进行设置

image.png

总结

整体逻辑上很清晰的设计

有点麻烦的技能绑定

目前做了个弹道技能 弹道消失动画和人物相关抬手还没完成,之后做完再整体唠一遍
erDiagram
Character ||--o{ Skill : Hold
Skill ||--o{ Actor : Create
Actor ||--o{ Other : Hit
Character ||--o{ Event : Make
Other ||--o{ Event : Make
逻辑是这么个东西 实现起来有点麻烦

不管有的没的 先建个文件夹

image.png

按照经验需要来个Master

image.png

技能需要和使用人绑定

image.png

按照常理还需要分范围和单体技能

image.png

这里Type放在ENUM中,方便之后调整

ShootSkill

按照Master生成的子类 
逻辑上需要一个被施加者 就是被打到的人物 用Actor集合进行实现

image.png

想想办法先射出去一发

我们得要个子弹Actor
建立Bullet 有时间再搞个像样的模型

image.png

还得来个子弹发射方向
方向得从鼠标中获取
回到PlayController中获取鼠标位置

image.png

对了还得个人物一个发射口

image.png

我们把获取射击方向在Lib上实现,便于之后调用

image.png

虽然说是3DGame实现起来依然是2D的思维 
注意这里获取的是单位方向的值
到这里就可以Spawn一个子弹在发射口

image.png

Bullet 没有实际上的最大飞行距离

子弹需要做一个飞行和碰撞实现功能
最大飞行弹道距离,飞行速度和碰撞对象在结构体中实现 便于以后调整

image.png

在Tick中实现物体偏移 就能流畅的飞了

image.png

 这里可以看到这种方式下每帧*飞行速度是无法得到整数的,
 基本上子弹都会往最大距离再加上一些 
 毕竟是0.0167
 这里达到后就摧毁了 实际上还得来个摧毁动画 

子弹碰撞到对象

graph TD
碰撞体包裹子弹 --> 子弹飞行
子弹飞行 --> 获取碰撞对象
获取碰撞对象 --> 属于阻挡对象
属于阻挡对象 --> 子弹摧毁
获取碰撞对象 --> 不属于阻挡对象
不属于阻挡对象 --> 继续飞

image.png

这里加了阵营的判断

处理获取的碰撞对象

回到ShootSkill中

image.png

这里的ChacterToCharacter是自己Lib中处理人物交互的 
以后完善了 讲讲这么个设计思路

整合 ShootSkill

把之前的操作包装到ShootSkill的一个function

image.png

PlayController中生成SkillActor

这里先在控制器中实现同时与操作人物进行绑定
以后还需要拿出在重新设计一遍

image.png

按Q射射射

image.png

zm0it-wzocy.gif

总结

之后技能还需要做一个人物绑定,目前还是半成品