x


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;

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

}

more ▼

asked Jul 13, 2010 at 11:10 PM

Peange gravatar image

Peange
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

jc_lvngstn gravatar image

jc_lvngstn
604 79 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;
Destroy(collide.gameObject);

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

Mike 3 gravatar image

Mike 3
33k 21 86 294

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

karl_ gravatar image

karl_
3k 115 114 139

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"){
               
            ckp=ckp+1;
         GameObject.Find("Cube2").transform.Translate(0, -1000, 0);
         GameObject.Find("Cube1").transform.Translate(0, 1000, 0);
         
         }
 
  else if (hit.gameObject.name == "Cube2"){
              
            ckp=ckp+1;
         GameObject.Find("Cube3").transform.Translate(0, -1000, 0);
         GameObject.Find("Cube2").transform.Translate(0, 1000, 0);
 }

etc

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

By RSS:

Answers

Answers and Comments

Topics:

x4267
x3196
x1177

asked: Jul 13, 2010 at 11:10 PM

Seen: 2927 times

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