Оператор ?? с уничтоженным объектом Unity: что произойдёт на следующей строке
В системе автонаведения написано так:
Enemy target = FindNearestEnemy() ?? _fallbackTarget;
target.TakeDamage(10);
FindNearestEnemy() берёт врага из своего списка. Для найденного врага ещё в предыдущем кадре был вызван Destroy(enemy.gameObject), но из списка его не убрали. _fallbackTarget — живой объект-манекен. Что будет?
- После Destroy ссылка на объект становится настоящим null, поэтому оператор подставит манекен и код отработает ровно так, как задумано
- Подставится манекен: Unity специально переопределяет оператор ?? для своих объектов, чтобы уничтоженные ссылки считались пустыми
- Выбор ссылки оператором ?? выполнен верно, не хватает лишь проверки активности: у уничтоженного врага activeInHierarchy равен false
- ?? проверяет настоящий null, а уничтоженный объект Unity им не является: в target попадёт мёртвая ссылка и вызов упадёт
