前言
先讲讲绿圈和攻击范围怎么制作和绑定
再粗略的讲讲人物和技能之间的绑定
正文
用材质做绿圈
效果

制作方法

RadialGradientExponential 就是提供一个实心圆
Lerp : from + (to - from) * t
这里B直接放0 就等于
圆圈A+(-圆圈A)*圆圈B_Alpha
最后拿颜色包装一下
绑定到人物上
我会先弄个结构体把人物属性放到里面 方便以后调整

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

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


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

这个除以50也是好理解的 因为攻击范围常指半径
A键出现攻击范围
需要在Playcontroller中进行设置

总结
整体逻辑上很清晰的设计
有点麻烦的技能绑定
目前做了个弹道技能 弹道消失动画和人物相关抬手还没完成,之后做完再整体唠一遍
erDiagram
Character ||--o{ Skill : Hold
Skill ||--o{ Actor : Create
Actor ||--o{ Other : Hit
Character ||--o{ Event : Make
Other ||--o{ Event : Make
逻辑是这么个东西 实现起来有点麻烦
不管有的没的 先建个文件夹

按照经验需要来个Master

技能需要和使用人绑定

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

这里Type放在ENUM中,方便之后调整
ShootSkill
按照Master生成的子类
逻辑上需要一个被施加者 就是被打到的人物 用Actor集合进行实现

想想办法先射出去一发
我们得要个子弹Actor
建立Bullet 有时间再搞个像样的模型

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

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

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

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

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

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

这里可以看到这种方式下每帧*飞行速度是无法得到整数的,
基本上子弹都会往最大距离再加上一些
毕竟是0.0167
这里达到后就摧毁了 实际上还得来个摧毁动画
子弹碰撞到对象
graph TD
碰撞体包裹子弹 --> 子弹飞行
子弹飞行 --> 获取碰撞对象
获取碰撞对象 --> 属于阻挡对象
属于阻挡对象 --> 子弹摧毁
获取碰撞对象 --> 不属于阻挡对象
不属于阻挡对象 --> 继续飞

这里加了阵营的判断
处理获取的碰撞对象
回到ShootSkill中

这里的ChacterToCharacter是自己Lib中处理人物交互的
以后完善了 讲讲这么个设计思路
整合 ShootSkill
把之前的操作包装到ShootSkill的一个function中

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

按Q射射射


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