某个角色发射射线检测后检测到另一个角色,本文将介绍如何计算被击中点与被击中actor向前向量之间的夹角。这个夹角可以用来当作混合空间动画的水平轴与垂直轴,来实现受击动画等效果。

这里把这个部分放到一个函数里,因为线较多,且可以复用。

首先,需要获取两个向量一个为actor向前向量,一个为actor位置指向受击点的向量,然后将该向量单位化(这两个节点也可以用一个节点GetUnitDirection代替),最后将这个向量投影到xy平面。首先将两个向量进行dot点乘。点乘运算法则为两个向量的模相乘再乘以之间夹角的余弦值。然后再用反三角函数将余弦值变为角度。虚幻引擎里三角函数与反三角函数都要两类:角度与弧度。要用角度都用角度,要用弧度都用弧度。这样计算出来的角度是图中带箭头的两个线形成夹角的补角。再对这个角度去取正弦与余弦。
如图,当红色的点受到攻击时,此时的sin为正,cos为正。动画蓝图与混合空间里里,前为向前动画,左为向左动画……水平轴为x,垂直轴为y,紫色数字为混合空间里各轴的具体数值。所以此时的值为(+sin,+cos),这个角正好是红色点与圆心的直线与圆的另一个交点。这样播放的动画就是受击动画了。
如果只要点乘,那么左半部分与右半部分就完全相同不能区分,所以就需要用cross叉乘,叉乘遵守右手法则。当受击点在右半部分叉乘后向量的z轴为正,结果保持不变。当受击点在左半部分,这个值为负,我们将sin、cos都乘-1。这里不再举例,你可以找点自行验证。
至此,受击角度的计算就完成了。