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")
        score += 100;

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

asked Jul 13 '10 at 11:10 PM

Peange gravatar image

38 2 2 6

(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 '10 at 02:23 PM

jc_lvngstn gravatar image

544 26 31 41

(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 '10 at 11:56 PM

Mike 3 gravatar image

Mike 3
32.4k 16 77 278

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 '10 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 '10 at 11:58 PM

karl_ gravatar image

2.8k 42 56 77

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 '13 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 '10 at 11:10 PM

Seen: 2605 times

Last Updated: Mar 03 '13 at 12:26 PM