- Home /
OnCollisionEnter Problem
Hello Unity3D.i have a problem with my script.The Problem with my script is,My OnCollisionEnter won;t work the way i want it.For example,I have 5 animations i want my character to do on an opponent and i only does 1 out of the 5.Which is the first one...If anyone knows how i can make all 5 of the animations work.Can you please tell me how?
Heres the script
var player : GameObject;
function OnCollisionEnter(collision : Collision){
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Sweep_Kick"))
collision.transform.gameObject.animation.Play ("Stand_Air_Hit_back");
}
else
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Violets_Bicycle_Kick"))
collision.transform.gameObject.animation.Play("Violets_Bicycle_Kick_Hit_Part_One");
}
else
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Violets_Bicycle_Kick_Part_2"))
collision.transform.gameObject.animation.Play("Violets_Bicycle_Kick_Hit_Part_Two");
}
else
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Lance_Kick_2"))
collision.transform.gameObject.animation.Play ("Air_Hit_Going_Up");
}
else
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Falcon_Punch"))
collision.transform.gameObject.animation.Play ("Hit_Flying");
}
}
logic problem. control will never go out of first "dummy" "if", if u are always checking against dummy check against animations inside one "dummy" if.
You only need one "if(collision.gameObject.tag == "Dummy")" to wrap everything. Alternatively (though very ugly) you could remove the else's.
Im sorry.Do you mean like this?Because i tried this way as well and there was no difference.
var player : GameObject;
function OnCollisionEnter(collision : Collision){
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Sweep_$$anonymous$$ick"))
collision.transform.gameObject.animation.Play ("Stand_Air_Hit_back");
}
else
if(player.animation.IsPlaying("Violets_Bicycle_$$anonymous$$ick")){
collision.transform.gameObject.animation.Play("Violets_Bicycle_$$anonymous$$ick_Hit_Part_One");
}
else
if(player.animation.IsPlaying("Violets_Bicycle_$$anonymous$$ick_Part_2")){
collision.transform.gameObject.animation.Play("Violets_Bicycle_$$anonymous$$ick_Hit_Part_Two");
}
else
if(player.animation.IsPlaying("Lance_$$anonymous$$ick_2")){
collision.transform.gameObject.animation.Play ("Air_Hit_Going_Up");
}
else
if(player.animation.IsPlaying("Falcon_Punch")){
collision.transform.gameObject.animation.Play ("Hit_Flying");
}
}
Answer by raulrsd · Mar 15, 2015 at 02:28 AM
I think it's a problem with the way you're organizing the if statements. Try this code instead:
function OnCollisionEnter(collision : Collision){
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Sweep_Kick")){
collision.transform.gameObject.animation.Play ("Stand_Air_Hit_back");
}
else if(player.animation.IsPlaying("Violets_Bicycle_Kick")){
collision.transform.gameObject.animation.Play("Violets_Bicycle_Kick_Hit_Part_One");
}
else if(player.animation.IsPlaying("Violets_Bicycle_Kick_Part_2")){
collision.transform.gameObject.animation.Play("Violets_Bicycle_Kick_Hit_Part_Two");
}
else if(player.animation.IsPlaying("Lance_Kick_2")){
collision.transform.gameObject.animation.Play ("Air_Hit_Going_Up");
}
else if(player.animation.IsPlaying("Falcon_Punch")){
collision.transform.gameObject.animation.Play ("Hit_Flying");
}
}
}
This way works =D.But this also works aswell
var player : GameObject;
function OnCollisionEnter(collision : Collision){
if(collision.gameObject.tag == "Dummy"){
if(player.animation.IsPlaying("Sweep_$$anonymous$$ick"))
collision.transform.gameObject.animation.Play ("Stand_Air_Hit_back");
}
if(player.animation.IsPlaying("Violets_Bicycle_$$anonymous$$ick")){
collision.transform.gameObject.animation.Play("Violets_Bicycle_$$anonymous$$ick_Hit_Part_One");
}
if(player.animation.IsPlaying("Violets_Bicycle_$$anonymous$$ick_Part_2")){
collision.transform.gameObject.animation.Play("Violets_Bicycle_$$anonymous$$ick_Hit_Part_Two");
}
if(player.animation.IsPlaying("Lance_$$anonymous$$ick_2")){
collision.transform.gameObject.animation.Play("Air_Hit_Going_Up");
}
if(player.animation.IsPlaying("Falcon_Punch")){
collision.transform.gameObject.animation.Play("Hit_Flying");
}
}
The problem with your solution is that the if statements which are out of if(collision.gameObject.tag == "Dummy") will be fired even if the GameObject that is colliding has a tag different from "Dummy". I don't know if you are ok with that behavior.
Your answer
Follow this Question
Related Questions
OnCollisionEnter not working. 2 Answers
Checking to see if two objects are colliding. 2 Answers
Cannot remove a prefab using OnCollisionEnter function. 1 Answer
function OnCollosionEnter problems 1 Answer
Collide detection with tag [JS] 0 Answers