# V3216. Unity Engine. Checking a field with a specific Unity Engine type for null may not work correctly due to implicit field initialization by the engine.

Анализатор обнаружил ненадежную проверку на `null` поля, которое может быть инициализировано в инспекторе Unity. Ненадежной она является, потому что выполняется с помощью оператора, не имеющего перегрузку для учета специфики кода Unity-скриптов. В частности, Unity неявно инициализирует отображаемые в инспекторе поля базовым значением если их тип — `UnityEngine.Object` или производный от него (исключение – `MonoBehaviour` и `ScriptableObject` классы). Этот объект является эквивалентом `null`, однако операторы `?.`, `??`, `??=` и `is` не знают об этом и воспринимают его как обычное значение.

Рассмотрим пример:

    public class ActivateTrigger: MonoBehaviour
    {
      [SerializeField]
      GameObject _target;

      private void DoActivateTrigger()
      {
         var target = _target ?? gameObject;
        ....
      }
    }

В данном случае, если значение `_target` еще не менялось в процессе выполнения, проверка `??` будет считать `_target` не равным `null`, независимо от того, было назначено значение поля в инспекторе Unity или нет.

Решением проблемы является использование `==`, `!=` или сокращенных проверок (`field`, `!field`) для проверки на равенство/неравенство с `null`, которые учитывают специфичные для Unity-скриптов моменты.

Так, в данном случае исправленный код может выглядеть следующим образом:

    public class ActivateTrigger: MonoBehaviour
    {
      [SerializeField]
      GameObject _target;

      private void DoActivateTrigger()
      {
        var target = _target;

        if (target == null)
          target = gameObject;
        ....
      }
    }

Теперь вместо `??` используется проверка `target` на равенство `null` с помощью оператора `==`. Данная операция имеет переопределение, учитывающее нюанс описанный в начале документации (так же как `target != null`), а потому проверка будет работать правильно в любом случае.

Данная диагностика классифицируется как:

CWE-754