>
>
>
V3212. Unity Engine. Pattern matching d…


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) 
    {....}
  }
}