Multiple OnTriggerEnter but each in different scripts
Hello! I wanna know whether it's possible to use two OnTriggerEnter but each one in two different scripts. So this one is for script "player"
void OnTriggerEnter2D(Collider2D collision) // Item
{
if (collision.tag == "Item") {
Item item = collision.gameObject.GetComponent<Item>();
Key++;
}
Destroy(collision.gameObject);
}
And this one's for script "teleporting"
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
targetObj = collision.gameObject;
}
else
targetObj = null;
}
Plz, explain easily to me! I'm new to this and my first language isn't English at all! Thanks :D
Answer by streeetwalker · Mar 25, 2020 at 09:30 PM
Yes, you can. You can put onTriggerEnter into as many scripts as you like.
For example, if you have two objects with scripts on them with onTriggerEnter, they only will trigger if you have colliders on the objects, and one of the colliders is set to Is Trigger, and one objects has a Rigidbody component. It doesn't matter which has Is Trigger, or which has the Rigidbody. If all that is true and the objects collide, onTriggerEnter will fire on both.
in this code, see my comments - this code doesn't make much sense because we cannot see the entire code of the script this function resides in:
void OnTriggerEnter2D(Collider2D collision) {
if (collision.tag == "Item") { // colliding with an object that has a tag "item"?
// the collision object has a script named "Item.cs" 'public class Item'
// don't confuse that class name with the tag!
// So create a reference to the Item script on this object
// I guess we want to do something with the public variables in
// the Item script, but then we destroy it below, so it doesn't make sense here
Item item = collision.gameObject.GetComponent<Item>();
Key++; // No idea why this is here
}
// and destroy the object we are colliding with. Not a good idea
// because we just got a reference to the Item script on this object.
// so, the code above doesn't make sense, as it is.
Destroy(collision.gameObject);
}
Hope it helps!