OnCharacterControllerHit doesn't work as documented

I have created a First Person Controller and a Cube with a box collider and Rigidbody added (similar to the Unity GUI Essentials tutorial).

I add a script to the FPC object (which contains the Character Controller as expected):

function OnCharacterControllerHit(hit:ControllerColliderHit) {
	Debug.Log("OnCharacterControllerHit");
}

I run the game and collide the FPC with the cube but this never gets called. If I add an OnTriggerEnter to the cube this does get called, so I’m forced to only put collision detection on target objects rather than the player. I’ve tried every single combination of settings; I’ve created 3 different scenes to test this; but it never works.

The function name is wrong: it should be OnControllerColliderHit. If you fix the function name, you will notice that it reports collisions with the ground all the time. To avoid this, you can filter out collisions with “too vertical” normals with this code:

function OnControllerColliderHit(hit: ControllerColliderHit){
  if (hit.normal.y < 0.9){ // accept only normals < 64 degrees (sin(64)~ 0.9)
    // collision wasn't vertical  
    Debug.Log("OnControllerColliderHit");
  }
}