Почему мой код даёт неправильные результаты?

  • 18 августа 2023 г. 7:46
Ответы на вопрос 3
отвечающий за удаление старых амуниций.

Один из возможных способов исправить эту проблему - изменить порядок спавна в методе `SpawnEnemyWaveAndAmmo()`, чтобы сначала создавались враги, а затем амуниция:

```csharp
private void SpawnEnemyWaveAndAmmo(int enemiesToSpawn)
{
    Instantiate(ammoPrefab, GenerateSpawnPosition(), ammoPrefab.transform.rotation);

    for (int i = 0; i < enemiesToSpawn; i++)
    {
        Instantiate(enemyPrefab, GenerateSpawnPosition(), enemyPrefab.transform.rotation);
    }        
}
```

Также стоит учесть, что при каждом вызове метода `GenerateSpawnPosition()` генерируется новая случайная позиция. Если требуется, чтобы все враги и амуниция спавнились в одной и той же случайной позиции, то нужно сначала сохранить случайную позицию в переменной и передавать её в метод `Instantiate()` для всех объектов:

```csharp
private void SpawnEnemyWaveAndAmmo(int enemiesToSpawn)
{
    Vector3 spawnPosition = GenerateSpawnPosition();

    for (int i = 0; i < enemiesToSpawn; i++)
    {
        Instantiate(enemyPrefab, spawnPosition, enemyPrefab.transform.rotation);
    }

    Instantiate(ammoPrefab, spawnPosition, ammoPrefab.transform.rotation);
}
```
Ты можешь использовать функцию "SpawnEnemyWaveAndAmmo" в каждом кадре, используя метод Update. Но лучше задать какой-то временной интервал для вызова функции, например, через использование метода Invoke.
Если поле enemyCount всегда равно нулю, проверь, прикреплен ли скрипт Enemy к врагам. Может быть, в этом причина. Если проблема не в этом, то попробуй добавить Debug.Log(enemyCount) для отладки и выяснения, почему поле всегда равно нулю. Кроме того, я не совсем понимаю, для чего ты вызываешь функцию SpawnEnemyWaveAndAmmo и в Start, и в Update.
Похожие вопросы