Поиск игрока по сцене в Update у каждого врага
У каждого врага висит такой код, врагов на волне до 200:
void Update()
{
var player = FindObjectOfType<Player>();
if (Vector3.Distance(transform.position, player.transform.position) < 5f)
Attack();
}
Что здесь основная проблема и как правильно?
- Перебор объектов сцены выполняется каждый кадр каждым врагом: ссылку на игрока получают один раз при инициализации и хранят в поле
- Так и надо: иначе после перезагрузки сцены сохранённая в поле ссылка станет недействительной, а поиск всегда возвращает актуальный объект игрока
- Проблема только в Vector3.Distance: извлечение корня в кадре дороже поиска объекта, надо сравнивать квадраты расстояний и оставить поиск как есть
- Достаточно вызывать поиск раз в десять кадров, тогда накладные расходы станут незаметными
