I want to use OverlapBox to create a box in front of a vehicle and be able to check collision on demand. I use draw gizmo to be able to see the size and position of the box to confirm that size and position are correct.
This is my code:
public class TestCollision : MonoBehaviour
{
[Header("Collision")]
public Vector3 m_DetectorOffset = Vector3.zero;
public Vector3 m_DetectorSize = Vector3.zero;
private LayerMask m_LayerMask;
private Renderer m_Renderer = null;
void Start()
{
m_LayerMask = (1 << LayerMask.NameToLayer("Pedestrian")) | (1 << LayerMask.NameToLayer("Vehicle"));
m_Renderer = GetComponent<Renderer>();
m_Renderer.material.color = Color.green;
}
private void FixedUpdate()
{
if (CheckForCollisions())
m_Renderer.material.color = Color.red;
else
m_Renderer.material.color = Color.green;
}
public bool CheckForCollisions()
{
Vector3 colliderPos = transform.position + m_DetectorOffset;
Collider[] colliders = Physics.OverlapBox(colliderPos, m_DetectorSize, transform.rotation, m_LayerMask);
if (colliders.Length == 1)
{
// Ignore collision with itself
if (colliders[0].gameObject == gameObject)
return false;
return true;
}
if (colliders.Length > 0)
return true;
return false;
}
#if UNITY_EDITOR
protected virtual void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.matrix = transform.localToWorldMatrix;
Gizmos.DrawWireCube(m_DetectorOffset, m_DetectorSize * 2.0f);
}
#endif
}
This script works great if I don’t rotate the “vehicle” - in the picture the blue cube is the object I want to detect, the green/red cube is the vehicle and the red wireframe box is the OverlapBox represented by the gizmo:
The issue occurs when the “vehicle” rotates - in the following picture I rotate the vehicle 90 degrees in the Y axis, the gizmo represents the box in the correct position, however the OverlapBox logic is ignoring such rotation (even though when the rotation of the object is passed in the function):
How can I make the OverlapBox to work properly taking rotation into consideration and being able to represent an accurate gizmo.
Many thanks in advance.