From 7f1d9a1eb73816f14b5d90455b0aa2d58c9c66ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Bu=C3=9F?= Date: Fri, 6 Dec 2024 09:49:43 +0100 Subject: [PATCH] improved view sensor --- Assets/Kekser/Sensors/ViewSensor.cs | 7 +++++-- Assets/Kekser/Sensors/ViewSensor2D.cs | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) 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); }