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)
также приведет к исключению.
Данная диагностика классифицируется как: