Detect collisions only from in front?

How can I detect a collision with an object in front of my character controller? In my game, the controller is constantly running forwards, and I want my controller to tumble backwards when it smacks into something. The problem is that the controller is also colliding with the ground at the time of collision, so using OnControllerColliderHit results in multiple collision points being referenced (I believe the average of the two points is taken). Is there any way I can ignore the ground, roof, and walls to the left/right?

Raycasts: I considered using a raycast to solve my problem, but I do not like this solution for two reasons:

  1. The raycast may miss objects (should a planar raycast be used?)
  2. The raycast must be constantly updated, which is expensive

Any help is greatly appreciated! Non-working code:

function OnControllerColliderHit(myCollider : ControllerColliderHit)
{
    var colDir : Vector3 = myCollider.transform.position - transform.position;
    angle = Vector3.Angle(colDir, transform.forward);
    
    if (angle < 15.0)
    {
      isTumbling = true;
    }
}

Hi, I think that a good solution is to RayCast from your CharacterController in Transform.Forward direction with limited distance. Or you can simply check collision sources (ground, wall,…) in OnCollisionEnter routine.