Before updating to Windows 10 you may need to return your Pro license. More information here

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.6k 28 156 319

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.5k 118 134 160

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: 3012 times

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