racing game raycast problem

Hi all,

In my racing game, the AI of the opponents follow waypoints along the track, but i'm having problems when they get closer to each other and begin to crash. So i came up with the idea to use raycast to see if there is any car between this car and the next waypoint or in the Vector3.forward and slow down a bit so they don't crash.

RaycastHit hit;

	if (carCollider.Raycast(new Ray(carCollider.transform.position, Vector3.forward), out hit,4000.0f))
	{
		Debug.Log("raycast at "+hit.transform.name);
		if (hit.transform.tag == "car" || hit.transform.tag == "Player")
		{
			Debug.Log("There's a car ahead: "+hit.transform.name);
		}
	}

With this code, nothing is being logged by the debugger. What am i missing ? Call cars have colliders and are tagged 'car' or 'Player'. Any idea what's happening or an alternative so they wont bump on each other ?

I think the problem is that you're calling 'Raycast' on your carCollider. This means that the raycast would only detect your own car's collider. Since the ray is starting inside that collider, it won't detect it at all.

You're using this version of raycast: Collider.Raycast

When I think instead you probably want: Physics.Raycast (which detects collisions against every collider in the scene, not just the collider on which it was called).

Instead of asking the physics engine you could calculate the distance between the AI cars.

Reference + Example

Or use sphere colliders for each AI car as triggers for slowing down.