Вороги та Підсилення
Розробка ігор часто вимагає перегляду минулих рішень для вирішення нових задач. Створюючи флот ворогів для битви з босом на космічній станції, я знову звернувся до того, як я перейшов від використання конструкцій else if до масивів і випадкових значень при управлінні підсиленнями та ворогами. Хоча ці методи не зовсім підходять до моїх поточних потреб, вони стали основою для масштабованих систем спауна і сформували мій підхід до вирішення проблем.
Масиви Підсилень/Ворогів
На ранніх етапах розробки я використовував конструкції else if для обробки спауна підсилень та ворогів. Наприклад:
if (powerupType == 1)
{
Instantiate(ShieldPowerup);
}
else if (powerupType == 2)
{
Instantiate(SpeedBoost);
}
Цей підхід працював певний час, але коли я додавав нові типи підсилень та ворогів, код став незручним. Кожне нове доповнення вимагало змінювати кілька рядків, що збільшувало ризик появи багів і робило систему важчою для підтримки.
Щоб спростити та зробити свій код більш гнучким для майбутнього, я замінив структуру else if на масиви та випадкові значення. Ось приклад того, як я реалізував це для підсилень:
[SerializeField]
private GameObject[] powerups;
void SpawnPowerup()
{
int randomIndex = Random.Range(0, powerups.Length);
Instantiate(powerups[randomIndex]);
}
Ця зміна згрупувала пов'язані об'єкти в масиви, що дозволило зробити код чистішим і гнучкішим. Додавати нові підсилення стало так само просто, як перетягнути його в масив в інспекторі Unity.
Повертаючись до цієї системи під час роботи над флотом на космічній станції, я згадав важливість адаптивності. Масиви та випадкові значення добре працювали для підсилень і ранніх ворогів, але не підходили для послідовного спауна, який був необхідний для мого флоту. Попри це, структуроване мислення, яке я розвивав на ранніх етапах, допомогло мені оцінити і спроектувати нову систему.
Роздуми про минулі методи не полягають у повторному використанні тих самих рішень, а у використанні їх для вирішення нових задач.
Перекладено з: Arrays and Randomization