Анализатор обнаружил потенциальную ошибку, связанную с тем, что объект производный от 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)
{....}
}
}