计算NPC在你的前面还是后面

利用点乘可以很好的实现这一点,已知 a·b = |a||b|cosβ,我们可以点乘主角到NPC的向量和主角面向的forward方向。然后根据cosβ的正负值来判断在前还是在后。因为cosβ数学函数在(-90°,90°)刚好是大于0的,刚好在前时,两向量的夹角也是这个范围。

blob.png

Transform targetNpc;
void Start () {
    targetNpc = GameObject.Find("Npc").transform;
    //计算在前还是在后  cos [-90,90] 为 [0,1]
    float res = Vector3.Dot(transform.forward, targetNpc.position - transform.position);
    if (res > 0)
    {
        Debug.Log("在前面");
    }
    else if (res < 0)
    {
        Debug.Log("在后面");
    }
    else
    {
        Debug.Log("在正左或右");
    }
}


如果说主角的视野范围有限,在一个角度之内,那么也很简单。例如视野范围为60°,那么临界值就是cos(60/2),比这个值大的就是可以看见的,因为cos角度越靠近0(越靠近forward)就越大。


首页 我的博客
粤ICP备17103704号