Коли я розробляв першу атаку для битви з боссом космічної станції, мені знадобився спосіб спаунити флот з 40 ворогів. На відміну від попередніх систем, що використовували рандомізацію, цей флот вимагав послідовного спаунінгу. Кожен корабель мав унікальний вигляд, але однакову поведінку, і вони повинні були з'являтися в певному порядку.
Флот ворогів
Для цього сценарію рандомізація порушила б візуальну цілісність флоту. Послідовний порядок додав відчуття навмисного дизайну та темпу атаки, роблячи її більш осмисленою та впливовою.
Я почав з того, що створив масив для зберігання префабів ворогів флоту:
[SerializeField]
private GameObject[] enemyFleet;
[SerializeField]
private int totalEnemyFleet = 40;
Далі я написав корутину для створення ворогів у порядку:
IEnumerator SpawnEnemyFleet()
{
for (int i = 0; i < totalEnemyFleet; i++) {
int index = i % enemyFleet.Length;
Instantiate(enemyFleet[index]);
yield return new WaitForSeconds(0.5f); // Налаштуйте час затримки за потреби
}
Використання i % enemyFleet.Length забезпечило безперервне циклічне виконання масиву, навіть якщо загальна кількість кораблів перевищувала розмір масиву.
Переваги цього підходу
- Контроль через інспектор: Завдяки тому, що _totalEnemyFleet є серіалізованим полем, я міг легко змінювати розмір флоту без необхідності редагувати код.
- Гнучкість у налаштуванні часу: Корутіна дозволила мені контролювати темп процесу спаунінгу, додаючи драматичне напруження до атаки.
Послідовний спаунінг вимагав зміни мислення від рандомізації до навмисного дизайну.
Перекладено з: Sequential Spawning: Space Station Fleet