- Home /
Collision against conditions
I have a "fireball" object. The object is instantiated at the position of the hero, and then is moved using AddForce().
The "fireball" is also given 20 health, and whenever it hits something it loses 10 health.
The code I'm using (rather, just the conditions) should work, though it's not. Does something special need to be done when you handle colliders?
void OnCollisionEnter()
{
if (collider.gameObject.tag == "Cube" || collider.gameObject.tag == "Terrain")
{
collider.gameObject.SendMessage ("ApplyDamage", 10);
Debug.Log (collider.gameObject.GetComponent<Spells>().S_CurrentHealth);
if (this.gameObject.GetComponent<Spells>().S_CurrentHealth <= 0)
{
Destroy(this.gameObject);
}
}
else
{
Debug.Log ("Nothing");
}
}
What this is SUPPOSED TO DO is apply damage to the "Cube" hero (the point of the fireball's origin) and also apply damage to the terrain object. (I was hoping to reach a null-reference-error, since I don't have an "ApplyDamage" function attached to the terrain.
Instead what's happening is the Debug.Log is telling me that there's "Nothing."
The funny thing is though when I switch the conditions around to
`if (collider.gameObject.tag != "Cube" && collider.gameObject.tag != "Terrain")`
The script applies damage twice; once when it is instantiated and another time when it hits the terrain, basically saying that it's colliding with the two things that it's not supposed to collide with (Opposite day, by chance?)
Last point of clarification
For testing purposes, I used GetComponent directly instead of applying it to a variable first.
So yeah, does anyone know why this could be happening?
UPDATE
Whether or not I switch the "Or" and "And" operators, it does the same thing.
Answer by Eric5h5 · Dec 01, 2012 at 02:50 AM
You're using the collider of the GameObject that the script is attached to. The correct form is to use "OnCollisionEnter (Collision other)" (or some other variable name rather than "other", but it must be of type Collision), and refer to "other" in the function. As an aside, it's slightly faster and more efficient to use the CompareTag function rather than doing string comparisons.
Wow, thanks!
Now it's popping up that the health is remaining at 20 (working as intended)
The collision words get a little confusing for me, so thanks lol.
Also thank you for the CompareTag feature; honestly didn't even know there was one aside from the gameObject.tag.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Struggeling with inverselerp and gradients and adding collider to code generated mesh. 0 Answers
Enemy Death and Respawn?? 3 Answers