У будь-якому зіткненні задіяно два GameObjects? Що я хочу знати, як я вирішую, який об’єкт повинен містити мій OnCollision*
?
Як приклад, припустимо, у мене є об’єкт Player та об'єкт Spike. Перша моя думка - поставити на плеєр сценарій, який містить такий код:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
Звичайно, точно такої ж функціональності можна досягти, замість того, щоб на об’єкті Spike був сценарій, який містить такий код:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
Хоча обидва є дійсними, для мене було більше сенсу мати сценарій на програвачі, оскільки в цьому випадку, коли відбувається зіткнення, на програвачі виконується дія .
Однак, в чому я сумніваюсь, це те, що в майбутньому ви, можливо, захочете додати більше об’єктів, які вбиватимуть програвача при зіткненні, таких як Ворог, Лава, Лазерний промінь тощо. Ці об’єкти, ймовірно, матимуть різні теги. Тож сценарій на програвачі став би:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
Тоді як, у випадку, коли сценарій був на Spike, все, що вам потрібно було б зробити, це додати цей самий сценарій до всіх інших об'єктів, які можуть вбити програвача та назвати сценарій чимось подібним KillPlayerOnContact
.
Крім того, якщо у вас зіткнення між програвачем і ворогом, ви, ймовірно, захочете виконати дію і над обома . Тож у такому випадку, який об’єкт повинен керувати зіткненням? Або обидва повинні керуватися зіткненням та виконувати різні дії?
Я ніколи раніше не будував гру будь-якого розумного розміру, і мені цікаво, чи може код стати безладним і складним у підтримці, оскільки він зростає, якщо на початку ви помиляєтесь. А може всі способи дійсні, і це насправді не має значення?
Будь-яке розуміння дуже цінується! Спасибі за ваш час :)
Tag.SPIKE
замість цього?