In ogni collisione, ci sono due GameObject coinvolti, giusto? Quello che voglio sapere è, come faccio a decidere quale oggetto dovrebbe contenere il mio OnCollision*
?
Ad esempio, supponiamo che io abbia un oggetto Player e un oggetto Spike. Il mio primo pensiero è quello di mettere uno script sul lettore che contenga un codice come questo:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
Naturalmente, la stessa identica funzionalità può essere ottenuta invece con uno script sull'oggetto Spike che contiene codice come questo:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
Sebbene entrambi siano validi, per me ha più senso avere la sceneggiatura sul Player perché, in questo caso, quando si verifica la collisione, viene eseguita un'azione sul Player .
Tuttavia, ciò che mi fa dubitare di ciò è che in futuro potresti voler aggiungere altri oggetti che uccideranno il giocatore in caso di collisione, come un nemico, una lava, un raggio laser, ecc. Questi oggetti probabilmente avranno tag diversi. Quindi lo script sul Player diventerebbe:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
Considerando che, nel caso in cui lo script fosse su Spike, tutto ciò che dovresti fare è aggiungere lo stesso script a tutti gli altri oggetti che possono uccidere il Player e nominare lo script in modo simile KillPlayerOnContact
.
Inoltre, se hai una collisione tra il giocatore e un nemico, probabilmente vorrai eseguire un'azione su entrambi . Quindi, in tal caso, quale oggetto dovrebbe gestire la collisione? O entrambi dovrebbero gestire la collisione ed eseguire azioni diverse?
Non ho mai costruito un gioco di dimensioni ragionevoli prima e mi chiedo se il codice può diventare disordinato e difficile da mantenere man mano che cresce se si sbaglia questo tipo di cose all'inizio. O forse tutti i modi sono validi e non importa davvero?
Qualsiasi intuizione è molto apprezzata! Grazie per il tuo tempo :)
Tag.SPIKE
invece?