Вступить в клуб →
лёгкаявопросАрхитектура игрового кода

Поиск игрока по сцене в Update у каждого врага

У каждого врага висит такой код, врагов на волне до 200:

void Update()
{
    var player = FindObjectOfType<Player>();
    if (Vector3.Distance(transform.position, player.transform.position) < 5f)
        Attack();
}

Что здесь основная проблема и как правильно?

  • Перебор объектов сцены выполняется каждый кадр каждым врагом: ссылку на игрока получают один раз при инициализации и хранят в поле
  • Так и надо: иначе после перезагрузки сцены сохранённая в поле ссылка станет недействительной, а поиск всегда возвращает актуальный объект игрока
  • Проблема только в Vector3.Distance: извлечение корня в кадре дороже поиска объекта, надо сравнивать квадраты расстояний и оставить поиск как есть
  • Достаточно вызывать поиск раз в десять кадров, тогда накладные расходы станут незаметными

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела