UE4中确认对象A在对象B的相对方位思路。

        需求背景:制作AI的时候想要确认玩家在AI的前方还是后方,第一种解决方案直接使用UE4自带的ai感知组件,问题能够解决,但是又有个需求----让AI的视野显示出来。类似盟军敢死队这种效果:

这个时候如果使用ue4自带的感知组件,那么需要获取到这个数据,不太方便,于是想着计算角度来实现同类效果。

虽然有些造轮子的嫌疑,不过总算是解决了前后方位的问题,姑且把思路记录下来分享给大家,如果有所启发就最好了,有更好的意见也可以留言交流。

-------------------------------------------分割线-------------------------------------------------

        最开始思路是用夹角公式:∠a=acos(v1v2/|v1|.|v2|)

实现如下(其实就是还原了公式):

但是这个结果值是{0,π/2},并没办法显示出左右。

测试结果是这样

可以看到值在0~180之间,并没有办法分辨出左右。

     

 直接计算角度行不通,于是把思路放到旋转值上。ue4中的旋转值是0~360度之间的,之前用其他乱七八糟的计算方法试了下,发现不太理想。直到···找到了delta这个节点Delta rotator 可以直接算出两个旋转值之间的差量,利用这个,我们最终实现了想要的效果。节点如下:


最终显示效果


可以通过判断这个值,来算出A相对于B所处的空间位置。前后左右都可以比较精确的表示。

例如:想要设置一个左右各45度视野一共90度视野的ai,那么就可以判断角色是否在AI正前方-45~45之间。


附上围绕旋转的球体逻辑,用基础三角函数就搞定了,当个备忘吧。