使用工具:UE5
使用资源:
【动画包】Carnegie Mellon University - CMU Graphics Lab - motion capture library
【人物模型】Steam平台 -- Vroid studio 1.3.0
【武器模型】虚幻商城 -- free fantasy weapon sample
目录
4.4 人物移动组件,攻击时我直接设置不移动,但这个根据需求即可
一、人物与武器模型的绑定
1.1 在人物骨骼网格体中安排一个适当的插槽
首先进入人物骨骼网格体,在手部位置新建一个插槽(如果不用手持武器就放在持握的地方),当然这里直接用模型本身在手指处的插槽实现效果差不多。
1.2 在人物蓝图处新建骨骼网格体
在人物网格体下方新增一个骨骼网格体组件,细节处指定武器模型,在右侧【插槽】栏目的父项套接字下输入人物骨骼里头的对应的插槽名称。
然后在视口中调整武器持握位置,此处mark两点,第一,如果有条件可以直接将预览动画设置为使用武器状态下的动画,手掌持握处可以和剑柄正好插入,看起来效果好很多;第二,调整好剑的角度,静态差别不大,动起来差很多,最好参照最后动画的实现效果多调试。
1.3 调整剑为初始不可视
二、持剑状态的切换
2.1 新建人物蓝图变量,用于切换状态
蓝图如下所示,mark几点:
1、这里碰撞检测还要改。武器最后是要通过判定重叠事件来进行伤害判定的,而且是在进行攻击时才开始判定,且判定范围一般并非自身网格体的大小,需要适当扩大,包括一些特效之类,因此这里的碰撞启用的对象后面还要修改,且需要改到普攻实现的蓝图处。
2、设置可视性这里关系到人物拔剑状态,我预设的是后期加入粒子系统剑自动出现在人物手中【还缺一个粒子效果】,当然也可以剑固定于人物背部再拔刀,就需要 【在动画状态机插入一个新状态并实现转换】,实现效果同理。
3、flip flop 很好用,适用于蹲伏、瞄准镜、UI界面等场合。
2.2 动画蓝图更新状态机
新建Anim蓝图变量:isSword,用于进行两个状态之间的转换(当然可以直接读取,但不方便调用
新建1D动画混合空间:速度维度,持剑时的idle和walk等(混合采样集如图
逻辑是:
1、Anim蓝图获取人物蓝图IsSword变量
2、利用该变量进行两个动画状态转换
3、持剑状态使用新的混合空间
随后在后面更新所有普攻动作,我这里设置了四段:
逻辑是:1-2-3-4-1 (均可返回持剑状态)
新建变量:back_sword用于四个普攻返回持剑状态
新建4个变量,对应(持剑-1,1-2,2-3,3-4)四个切换
三、整体逻辑
最主要的需求很简单,要在角色普攻动作结束前获取【1、是否继续攻击的指令】【2、执行攻击】
人物普攻的逻辑很多,这里拟定一个常见的:
攻击分为【前摇-攻击实现-后摇】三部分,一般一个游戏的角色普攻都会有非常明显的后摇,在连续点按时,不可取消后摇(即普攻连击时,后摇节点固定),这里我们则取后摇末端的某个节点来对玩家是否要进行连续攻击进行判定(A点),然后在B节点(可以适当提前)启用判定,也就是需要在AB区间内按下按钮才可触发连续平A。
(最开始没有放B节点,一二两段间隔按一下鼠标,就直接判定了第三段,如果动作时长较高,这种延迟性的手感很差,建议加上一个B重置判定。
具体情况需要根据游戏具体的设计来聊,如LOL的后摇能奖励玩家更频繁地操作以达到更高输出和技能躲闪,一些ARPG则是普攻后段数设置较高的数值倍率,玩家在追求高伤害的同时承担更多风险。
四、具体实现
4.1 普攻动画添加通知
在下方添加两个通知,第一个为重置(开始)连击判定,第二个为结算连击判定
其中最后一击较为特殊,结算通知需单独处理。
随后在动画蓝图中,(需要动画绑定至同一骨骼/进入该动画蓝图才可以调用通知),具体函数和变量在下一节人物蓝图中实现。
4.2 人物蓝图进行设置
新建变量:
1、IsAttack 用于记录是否在攻击状态下
2、AttackSequence用于记录第几个连击
3、continueAttack用于记录是否连击
1、这一块是基础设定,back是动画蓝图中用于使普攻状态返回持剑状态的变量,每次普攻结束返回idle/run后都会让back为true。
这里用蓝图看着很复杂,代码会更清楚
2、上图中,若玩家idle/run状态下初次普攻点击,则isAttack变为true,设定好攻击顺序后直接进入下图中的int switch普攻模式。
其后的点击将使得continue attack为true供动画后摇时判定。
3、而其他攻击的判定,则是上文中【动画通知---AnimBP调用人物BP custom event】这个就是123段普通后摇结束时的连击判定函数,因为首轮攻击1段前面没人能调用该函数且有变量尚未初始化,所以需要单独手动连接;
利用攻击序列来进行计数,基本逻辑就是【增加攻击序列、调整Anim BP的状态bool变量】
4.3 多轮普攻的衔接
一轮普攻4次,多轮普攻则需要重置,先简单写一个初始化函数。
然后在两种情况下调用,第一,使用普攻后,未在判定时间内按下输入,上小节【连续平A中直接返回该reset函数】,第二,一轮普攻结束后,需要重置,但不同的是,is attack不需要重置,然后直接调用连续平A函数即可。因为:
1、isAttack在理论上,在连续平A函数中用不到,但不改很难受
2、重置是,并未重置continueAttack变量,因为第一种情况该变量为false不需,第二种情况其为true直接就可以进行连续普攻的下一轮判定了。
4.4 人物移动组件,攻击时我直接设置不移动,但这个根据需求即可
设置运动模式 or disable movement两个均可用,在实现攻击动画和reset两处。