Вступить в клуб →
сложнаявопросC# и жизненный цикл Unity

Оператор ?? с уничтоженным объектом Unity: что произойдёт на следующей строке

В системе автонаведения написано так:

Enemy target = FindNearestEnemy() ?? _fallbackTarget;
target.TakeDamage(10);

FindNearestEnemy() берёт врага из своего списка. Для найденного врага ещё в предыдущем кадре был вызван Destroy(enemy.gameObject), но из списка его не убрали. _fallbackTarget — живой объект-манекен. Что будет?

  • После Destroy ссылка на объект становится настоящим null, поэтому оператор подставит манекен и код отработает ровно так, как задумано
  • Подставится манекен: Unity специально переопределяет оператор ?? для своих объектов, чтобы уничтоженные ссылки считались пустыми
  • Выбор ссылки оператором ?? выполнен верно, не хватает лишь проверки активности: у уничтоженного врага activeInHierarchy равен false
  • ?? проверяет настоящий null, а уничтоженный объект Unity им не является: в target попадёт мёртвая ссылка и вызов упадёт

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

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

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

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