Em qualquer colisão, há dois GameObjects envolvidos, certo? O que eu quero saber é: Como decido qual objeto deve conter o meu OnCollision*
?
Como exemplo, vamos supor que eu tenho um objeto Player e um objeto Spike. Meu primeiro pensamento é colocar um script no player que contenha algum código como este:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
Obviamente, a mesma funcionalidade exata pode ser alcançada com um script no objeto Spike que contém código como este:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
Embora ambos sejam válidos, fazia mais sentido para mim ter o script no Player porque, nesse caso, quando a colisão acontece, uma ação está sendo executada no Player .
No entanto, o que me faz duvidar disso é que, no futuro, você poderá adicionar mais objetos que matarão o Player em colisão, como Inimigo, Lava, Laser Beam, etc. Esses objetos provavelmente terão tags diferentes. Então o script no Player se tornaria:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
Enquanto que, no caso em que o script estava no Spike, tudo o que você precisava fazer era adicionar esse mesmo script a todos os outros objetos que podem matar o Player e nomear o script como algo semelhante KillPlayerOnContact
.
Além disso, se você tiver uma colisão entre o jogador e um inimigo, provavelmente desejará executar uma ação em ambos . Então, nesse caso, qual objeto deve lidar com a colisão? Ou devem lidar com a colisão e executar ações diferentes?
Eu nunca construí um jogo de tamanho razoável antes e estou me perguntando se o código pode se tornar confuso e difícil de manter à medida que cresce, se você entender esse tipo de coisa errada no começo. Ou talvez todas as formas sejam válidas e isso realmente não importa?
Qualquer ideia é bem apreciada! Obrigado pelo seu tempo :)
Tag.SPIKE
?