契机:制作AI动作混合的时候发现一个问题,由于没有ControlRotation值可以用。
(AI的ControlRotation和自身Pawn的Rotation值一致,不像玩家可以用鼠标来控制ControlRotation)
导致制作AI的四方向移动混合,不能使用玩家移动混合的思路,于是有了以下的想法。
先看下最终效果:
动作大致实现要求,AI在保持锁定玩家的状态下可以前后左右移动,动作混合也比较正确的播放出来。
接下来说下思路过程。四方向的动作混合首要问题是如何把方向计算出来。
最开始想用Calculate Direction这个节点--->但是出现了问题,之前说过AI的旋转始终是自己的旋转,不同于玩家还有一个Control旋转可以计算方向,行不通,出现了比较鬼畜的动作。
于是开始老老实实计算,上一篇中有提到Delta这个节点可以算旋转差量,同理也能够用来判断AI移动的方向。
而方向,AI的移动方向有一个值可以提供----Velocity,这个值表示物理对象或者有移动组件的对象 带方向的速度,它的长度就是我们通常说的速度值了。
现在我们获得了第一个向量,接下来只需要和角色自身的正方向进行计算即可,算之前现将向量转为X正方向的旋转值。
计算Direction过程如下
Z值就是我们需要的旋转值,这里会出现一个问题。就是当velocity值为(0,0,0),也就是角色静止的时候。aiForwardVector不为零,delta计算还是有结果。于是干脆在后面又乘以了Velocity的长度,这样,当玩家静止的时候,direction值为0,开始移动的时候值正常输出。最后将这个Direction值给动画混合用来控制x轴,speed来控制Y轴
根据值的特性,可以知道0~90~180 是站立~右移动~后退。0~-90~-180是站立,左移动,后退。那么就可以做出动作混合了
附上动作混合: