# V3213. Unity Engine. The 'GetComponent' method must be instantiated with a type that inherits from 'UnityEngine.Component'.

Анализатор обнаружил, что в качестве аргумента для метода `GetComponent` (либо схожего с ним) классов `Component` или `GameObject` передан тип, который не наследуется от `UnityEngine.Component` и не является интерфейсом. В таких случаях метод всегда возвращает `null` либо исключение. Некорректно использовать эти методы подобным образом.

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

    struct CameraAnchorData : IComponentData {}

    class CameraController: MonoBehaviour
    {
      ....
      public GameObject Target;

      private void Start()
      {
        if (Target.TryGetComponent<CameraAnchorData>(out var anchor))
        {
          ....
        }
      }
    }

В качестве generic-аргумента метода `TryGetComponent` используется тип `CameraAnchorData`, который не наследуется от `UnityEngine.Component`. Вызов метода всегда будет вызывать исключение.

Кроме generic-аргумента, неверный тип компонента может передаваться и в качестве обычного аргумента:

    struct CameraAnchorData : IComponentData {}

    class CameraController: MonoBehaviour
    {
      ....
      public GameObject Target;

      private void Start()
      {
        if (Target.TryGetComponent(typeof(CameraAnchorData), out var anchor))
        {
          ....
        }
      }
    }

Вызов метода `TryGetComponent` с обычным аргументом `typeof(CameraAnchorData)` также приведет к исключению.

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

CWE-628