diff --git a/Assets/Kekser/Sensors/ViewSensor.cs b/Assets/Kekser/Sensors/ViewSensor.cs index 507c5b8..fda8865 100644 --- a/Assets/Kekser/Sensors/ViewSensor.cs +++ b/Assets/Kekser/Sensors/ViewSensor.cs @@ -21,8 +21,11 @@ protected override Collider[] GetComponentsInSensor() for (int i = hitObjects.Count - 1; i >= 0; i--) { - Vector3 closestPoint = (Vector2) hitObjects[i].ClosestPoint(transform.position); - if (Vector3.Angle(closestPoint - transform.position, Vector3.Scale(transform.forward, transform.lossyScale).normalized) > _angle / 2f) + Vector3 closestPoint = hitObjects[i].ClosestPoint(transform.position); + Vector3 delta = (closestPoint - transform.position); + if (delta.sqrMagnitude < Mathf.Epsilon) + continue; + if (Vector3.Angle(delta, Vector3.Scale(transform.forward, transform.lossyScale).normalized) > _angle / 2f) hitObjects.RemoveAt(i); } diff --git a/Assets/Kekser/Sensors/ViewSensor2D.cs b/Assets/Kekser/Sensors/ViewSensor2D.cs index 36d6a76..116ba09 100644 --- a/Assets/Kekser/Sensors/ViewSensor2D.cs +++ b/Assets/Kekser/Sensors/ViewSensor2D.cs @@ -21,8 +21,11 @@ protected override Collider2D[] GetComponentsInSensor() for (int i = hitObjects.Count - 1; i >= 0; i--) { - Vector3 closestPoint = (Vector2) hitObjects[i].ClosestPoint(transform.position); - if (Vector2.Angle(closestPoint - transform.position, Vector3.Scale(transform.right, transform.lossyScale).normalized) > _angle / 2f) + Vector3 closestPoint = hitObjects[i].ClosestPoint(transform.position); + Vector3 delta = (closestPoint - transform.position); + if (delta.sqrMagnitude < Mathf.Epsilon) + continue; + if (Vector2.Angle(delta, Vector3.Scale(transform.right, transform.lossyScale).normalized) > _angle / 2f) hitObjects.RemoveAt(i); }