En cualquier colisión, hay dos GameObjects involucrados, ¿verdad? Lo que quiero saber es, ¿cómo decido qué objeto debe contener mi OnCollision*
?
Como ejemplo, supongamos que tengo un objeto Player y un objeto Spike. Mi primer pensamiento es poner un script en el reproductor que contenga un código como este:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
Por supuesto, se puede lograr exactamente la misma funcionalidad al tener un script en el objeto Spike que contiene un código como este:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
Si bien ambos son válidos, tenía más sentido para mí tener el guión en el Jugador porque, en este caso, cuando ocurre la colisión, se está realizando una acción en el Jugador .
Sin embargo, lo que me hace dudar es que en el futuro es posible que desee agregar más objetos que matarán al jugador en caso de colisión, como un enemigo, lava, rayo láser, etc. Es probable que estos objetos tengan etiquetas diferentes. Entonces el guión en el reproductor se convertiría en:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
Mientras que, en el caso de que el script estuviera en Spike, todo lo que tendría que hacer es agregar ese mismo script a todos los demás objetos que pueden matar al jugador y nombrar el script de forma similar KillPlayerOnContact
.
Además, si tiene una colisión entre el Jugador y un Enemigo, es probable que desee realizar una acción en ambos . Entonces, en ese caso, ¿qué objeto debería manejar la colisión? ¿O ambos deben manejar la colisión y realizar diferentes acciones?
Nunca antes había creado un juego de un tamaño razonable y me pregunto si el código puede volverse desordenado y difícil de mantener a medida que crece si al principio te equivocas. ¿O tal vez todas las formas son válidas y realmente no importa?
¡Cualquier idea es muy apreciada! Gracias por tu tiempo :)
Tag.SPIKE
lugar?