V3212. Unity Engine. Pattern matching does not correctly handle destroyed objects derived from 'UnityEngine.Object'.
Анализатор обнаружил потенциальную ошибку, связанную с тем, что производный от UnityEngine.Object
объект был использован с pattern matching'ом для проверки на null
.
Согласно документации Unity, не рекомендуется использовать pattern matching с объектами, производными от UnityEngine.Object
.
Дело в том, что проверка на null
с помощью pattern matching не учитывает возможность уничтожения объектов, производных от UnityEngine.Object
. Вследствие чего проверка может иметь некорректный результат.
Рассмотрим пример:
class CustomComponent: MonoBehaviour
{
public bool HitConfirm(....)
{
Projectile bullet;
....
if(....)
Destroy(bullet);
if (bullet is not null)
{....}
}
}
В данном случае, при проверке bullet
с помощью pattern matching'a, не будет учитываться возможность, что объект может быть уничтожен.
Чтобы это исправить, лучше использовать проверку с помощью оператора ==
или !=
.
Исправленный вариант:
class CustomComponent: MonoBehaviour
{
public bool HitConfirm(....)
{
Projectile bullet;
....
if(....)
Destroy(bullet);
if (bullet != null)
{....}
}
}