1
0
forked from cgvr/DeltaVR

shape scanner supports multiple object scanning, always destroys colliding objects on config completion

This commit is contained in:
2026-03-01 11:30:33 +02:00
parent dfdb47b94a
commit 95e67b9870
14 changed files with 90 additions and 97 deletions

View File

@@ -10,11 +10,13 @@ public class ShapeScannerRay : MonoBehaviour
private ShapeScanner _scanner;
private MeshRenderer[] meshRenderers;
private HashSet<GameObject> collidingObjects;
private bool _collisionRequired;
void Awake()
{
meshRenderers = GetComponentsInChildren<MeshRenderer>();
collidingObjects = new HashSet<GameObject>();
}
// Update is called once per frame
@@ -40,18 +42,23 @@ public class ShapeScannerRay : MonoBehaviour
{
if (other.gameObject.tag == scannableTag)
{
foreach (MeshRenderer meshRenderer in meshRenderers)
collidingObjects.Add(other.gameObject);
// Only activate when this was the first object that entered collision
if (collidingObjects.Count == 1)
{
meshRenderer.material = _activeMaterial;
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material = _activeMaterial;
}
if (_collisionRequired)
{
_scanner.IncrementCorrectRayCount();
}
else
{
_scanner.DecrementCorrectRayCount();
}
}
if (_collisionRequired)
{
_scanner.IncrementCorrectRayCount();
} else
{
_scanner.DecrementCorrectRayCount();
}
}
}
@@ -59,17 +66,27 @@ public class ShapeScannerRay : MonoBehaviour
{
if (other.gameObject.tag == "ShapeScannable")
{
foreach (MeshRenderer meshRenderer in meshRenderers)
collidingObjects.Remove(other.gameObject);
if (collidingObjects.Count == 0)
{
meshRenderer.material = _passiveMaterial;
}
if (_collisionRequired)
{
_scanner.DecrementCorrectRayCount();
} else
{
_scanner.IncrementCorrectRayCount();
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material = _passiveMaterial;
}
if (_collisionRequired)
{
_scanner.DecrementCorrectRayCount();
}
else
{
_scanner.IncrementCorrectRayCount();
}
}
}
}
public HashSet<GameObject> GetCollidingObjects()
{
return collidingObjects;
}
}