@Kiger

Как проверить есть ли префаб на сцене?

после того как спавнер останавливается, код должен проверить, остались ли враги на сцене. как это сделать?
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
1) По тегу. Метод FindGameObjectsWithTag возвращает массив объектов типа GameObject, характеризующихся указанным тегом. Если у вас сложный объект (состоящих из родительского и дочерних), то помечайте тегом только родительский. Минус данного подхода в том, что он относительно медленный, но ощутить его медленность у вас получится на действительно огромных сценах (несколько тысяч/десятков тысяч объектов).

Вот так будет выглядеть код, если вы пометите рут-объект врагов тегом Enemy:
var enemies = GameObject.FindGameObjectsWithTag("Enemy");
if (enemies.Length > 0) {
	// действие
}


2. По специфическому скрипту. Проблема тут та же, что и в прошлом пункте, поскольку под капотом они работают почти одинаково.

Скорее всего, для врага у вас есть специальный скрипт-контроллер, который называется, например, Enemy. Тогда код будет таким:
var enemies = FindObjectsOfType<Enemy>();
if (enemies.Length > 0) {
	// действие
}


3. Список врагов. Спавня врага, вы добавляете его в список. А перед уничтожеием удаляете из него.
Создание - скрипт спаунера:
public List<Enemy> enemies = new List<Enemy>();
// ...
var enemy = Instantiate(...);
enemies.Add(enemy);
// чтобы скрипт врага мог общаться с контроллером, передадим туда ссылку
enemy.spawner = this;
// и метод логики удаления
public void Remove(Enemy e) {
    enemies.Remove(e);
    if (enemies.Count > 0) {
        // действие
    }
}

Уничтожение, скрипт врага:
public Spawner spawner;
// ...
if (health <= 0) {
    spawner.Remove(this); // удаляем этого врага из списка спаунера
    Destroy(gameObject); // уничтожаем его объект
}

Третий способ самый выгодный с точки зрения производительности, так как вы имеете список, где есть только враги.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы