Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Подводные камни регулярных выражений: катастрофический возврат, ReDoS-атаки и выявление уязвимостей - 30.04

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

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

05 Фев 2025

Анализатор обнаружил, что в качестве аргумента для метода 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) также приведет к исключению.

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