The analyzer has detected a potential error related to the object derived from UnityEngine.Object
. This object was used with the null-conditional (?.
) or null-coalescing (??
and ??=
) operator.
According to the Unity documentation, it is not recommended to use the ?.
, ??
, and ??=
operators. They cannot be overloaded, so they do not consider that objects derived from UnityEngine.Object
may be destroyed. Therefore, the check may have an incorrect result.
Look at the example:
class CustomComponent: MonoBehaviour { public bool HitConfirm(....) { Projectile bullet; .... if(....) Destroy(bullet); .... if(bullet?.isJammed()) {....} } }
When addressing bullet
, the check with a null-conditional operator (?.
) will not consider that the object may be destroyed, since this operator cannot be overloaded.
To fix this, it is recommended to use a check with the ==
or !=
operator.
The fixed code:
class CustomComponent: MonoBehaviour { public bool HitConfirm(....) { Projectile bullet; .... if(....) Destroy(bullet); .... if(bullet != null ? bullet.isJammed() : null) {....} } }