Я пытаюсь создать игру в Unity 3d, в которой NPC двигаются, оглядываются и проверяют, какие объекты находятся под углом их обзора. Чтобы вычислить, какие объекты находятся внутри угла поля зрения, я использую встроенную в Unity функцию Vector3.Angle, см .:
// Get current position of the Robot.
var robotObjectPosition = currentTransform.parent.position;
// Get the direction to the object
var directionToObject = (objectToFind.transform.position - robotObjectPosition) / 2;
// Calculate the angle to the object and check if it's inside our viewAngle.
var isInsideAngle = Vector3.Angle(currentTransform.forward, directionToObject) < viewAngle / 2;
Теперь у меня есть странная проблема, когда, если я подхожу ближе к объекту (в данном случае плоскости в форме линии ворот), вышеприведенная проверка возвращает ложь, даже если объект все еще находится перед ним и линия ворот по-прежнему четко внутри его видения. Я сделал скриншот, чтобы визуализировать свою проблему.
На первом изображении линия цели находится внутри его поля зрения, но на втором (я переместил его на несколько шагов вперед) вышеприведенная функция возвращает false, хотя я четко вижу, что он все еще перед объектом. Я говорю, что это как-то связано с шириной другого объекта (потому что я делю угол обзора на 2), но я не смог найти решение для этого.
В основном я хотел бы понять, что здесь происходит.
* +1012 *