Анализатор обнаружил потенциальную ошибку, связанную с тем, что объект производный от UnityEngine.Object
был использован с оператором условного null (?.
) или null-объединения (??
и ??=
).
Согласно документации Unity, не рекомендуется использовать операторы ?.
, ??
и ??=
. Поскольку их нельзя перегрузить, они не учитывают возможность уничтожения объектов, производных от UnityEngine.Object
. Вследствие чего, проверка может иметь некорректный результат.
Рассмотрим пример:
class CustomComponent: MonoBehaviour { public bool HitConfirm(....) { Projectile bullet; .... if(....) Destroy(bullet); .... if(bullet?.isJammed()) {....} } }
В данном случае при обращении к bullet
проверка с помощью оператора условного null (?.
) не будет учитывать возможность, что объект может быть уничтожен, так как этот оператор нельзя перегрузить.
Чтобы это исправить, рекомендуется использовать проверку с помощью оператора ==
или !=
.
Исправленный вариант:
class CustomComponent: MonoBehaviour { public bool HitConfirm(....) { Projectile bullet; .... if(....) Destroy(bullet); .... if(bullet != null ? bullet.isJammed() : null) {....} } }