Double collision with Character Controller?

Hi folks, i'm relatively new to programming and even more so with Unity.

What i'm trying to do is create Pac-man for a University Coursework. I have quite a lot of it working, however a new problem has arisen and I don't know why.

Pac-man used to have a rigidbody attached to handle the collisions, however due to the forces applied (I think?) he kept bouncing off the maze walls. On further research I found the Character Controllers do not take forces into account. All was working well until I realised that more often than not double the score was given for each pellet consumed (sometimes the correct score was given). This only happened after I changed to Character Controller.

I've checked the log and it is incrementing by 100 but incrementing twice per collision. Any help is greatly appreciated.

Here's my Consume code:

private var score : int = 0; private var stringScore : String; private var scoreObject : GameObject;

scoreObject = gameObject.Find("Score");

function OnControllerColliderHit(hit : ControllerColliderHit) { var collide = hit.gameObject; if(collide.tag == "Pellet") { Destroy(collide.gameObject); score += 100;

 stringScore = score.ToString();
 scoreObject.GetComponent(TextMesh).text = stringScore;


more ▼

asked Jul 13, 2010 at 11:10 PM

avatar image

38 7 5 11

(comments are locked)
10|3000 characters needed characters left

3 answers: sort voted first

Just disable the pellet collider when you eat it, boom no more collisions and it will eventually get destroyed.

I don't have Unity if front of me, but it should be something along the lines of gameObject.Collider.Active = false

Or...just disabling the whole pellet might do the trick also.

more ▼

answered Jul 29, 2010 at 02:23 PM

avatar image

664 80 61 75

(comments are locked)
10|3000 characters needed characters left

Try DestroyImmediate instead of Destroy - it could be that your other object is hanging around for two fixedupdates before being deleted (which is feasible - you get 0 to lots of fixed updates every frame, depending on the timing)

Edit, since that failed spectacularly:

collide.transform.position.y -= 10000;

that should just move the other object far away from the play zone so it can't be collided with twice

more ▼

answered Jul 13, 2010 at 11:56 PM

avatar image

Mike 3
34.5k 26 151 318

Thanks but i've tried DestroyImmediate and Unity crashes =/ Is there any other way to do this? I also tried "yield" before the Destroy and no luck

Jul 14, 2010 at 12:02 AM Peange
(comments are locked)
10|3000 characters needed characters left

Instead of using OnControllerColliderHit try an OnTriggerEnter or OnCollisionEnter. This will ensure that your if statement is only called once.

more ▼

answered Oct 08, 2010 at 11:58 PM

avatar image

3.4k 118 132 158

I have the same issue but unfortnately what you said Karl still has the double hit problem ?

here is my code snippet ,any ideas ?

 function OnTriggerEnter(hit : Collider){
 if (hit.gameObject.name == "Cube1"){
         GameObject.Find("Cube2").transform.Translate(0, -1000, 0);
         GameObject.Find("Cube1").transform.Translate(0, 1000, 0);
  else if (hit.gameObject.name == "Cube2"){
         GameObject.Find("Cube3").transform.Translate(0, -1000, 0);
         GameObject.Find("Cube2").transform.Translate(0, 1000, 0);


sometimes ,randomly it moves the cube objects down twice 2000 instead of 1000 ?

Mar 03, 2013 at 12:26 PM javanoob
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments



asked: Jul 13, 2010 at 11:10 PM

Seen: 3005 times

Last Updated: Mar 03, 2013 at 12:26 PM