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

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

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

```cpp
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\-аргумента, неверный тип компонента может передаваться и в качестве обычного аргумента:

```cpp
struct CameraAnchorData : IComponentData {}

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

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

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