- Home /
Problem with CharacterController collision detection
Hi, I have a problem with the collision detection of the CharacterController component. I created a small bomb object and i want it to explode when the character touches it. The player object has a character controller object attached to it, while thethe bomb has a rigidbody and a capsule collider. As long as the bomb is moving, the method OnCollisionEnter works fine for collision detection, but as soon as it stops, I can not detect collisions anymore. I tried OnControllerColliderHit, too, but this doesn't even work for a moving bomb.
Is there a better method for the detection of collisions?
Answer by aldonaletto · Jan 17, 2012 at 09:45 PM
Collisions between rigidbodies and CharacterControllers are weird: OnCollision events are generated when the rigidbody hits the character, but not the other way around (except in some rare cases). These are some ways to work around this:
1- Use OnControllerColliderHit in the character script (this event isn't sent to the other object):
function OnControllerColliderHit(hit: ControllerColliderHit){ if (hit.tag == "Bomb"){ hit.SendMessageUpwards("Explode"); // call the function Explode in the bomb script } }
2- Child a somewhat larger trigger volume to the bomb, and use OnTriggerEnter to explode it (trigger script):
function OnTriggerEnter(other: Collider){ if (other.tag == "Player"){ SendMessageUpwards("Explode"); } }
The first alternative is easier, but is tied to the player. The second solution requires you to child a trigger volume (say, a sphere with the mesh renderer disabled) to the bomb, but doesn't need any changes in the player.
Your answer
Follow this Question
Related Questions
Character not moving on slopes 1 Answer
Stop objects from going through each other with rigidbodies 1 Answer
rotating/moving colliders with or without rigidbodies? 2 Answers
How to handle movement in a multiplayer FPS? 0 Answers
Enemy with character controller has inconsistent hit detection 1 Answer