我认为标题说明了一切。可以仅使用矢量数学来完成吗?
var toTarget = (enemy.transform.position - npc.transform.position).normalized;
var seesBack = Vector3.Dot(toTarget, npc.transform.forward) < 0;
似乎我应该以某种方式将目标的前向矢量混合到等式中,但是当涉及到矢量数学时(好吧,数学一般来说),我真的很蹩脚)。任何人吗?
编辑:
我也试过这样做,但角度太低了。例如,如果NPC位于其目标的右侧,则计算出的角度为~60度:
var angle = Mathf.Abs(Vector3.Angle(enemy.transform.forward * -1, npc.transform.forward));
var seesBack = angle <= 70;
答案 0 :(得分:3)
关闭!考虑到为了让npc看到敌人的背影,敌人必须大致朝向与从npc到敌人的向量相同的方向,即toTarget
:
var toTarget = (enemy.transform.position - npc.transform.position).normalized;
var seesBack = Vector3.Dot(toTarget, enemy.transform.forward) > 0;
请注意,Dot是针对敌人的变换,并且大于0。
答案 1 :(得分:0)
这两个都告诉你同样的事情:
这两个是否面向同一方向?
没有人告诉你关于哪一个在前面。
点积产品会更好,但您还需要检查谁是谁。
我能想到的一个非常头脑的方式是比较两个实体之间的距离,沿着NPC的前向矢量添加一小部分(比如,0.5个单位,一半是它的碰撞体积的大小)并获得从该点到另一个实体中心的距离。
如果偏移距离较小,则NPC落后(因为向前移动,它会更接近)。你可能也想在某个地方进行距离检查,所以“后面”不包括“三个房间”。但我认为你已经这样做了。
答案 2 :(得分:0)
可以仅使用矢量数学吗?
这将检查敌人是否正面向和位于NPC前面。
sex