хочу добавить объект в список когда на него падает райкаст но юнити выдает ошибку object reference not set to an instance of an object
вот мой код
public GameObject interactText;
public Transform teleportPosition;
private List<GameObject> eatDelete;
private RaycastHit hitData;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Ray ray = new Ray(transform.position, transform.forward);
if (Physics.Raycast(ray, out hitData, 4.1f))
{
if (hitData.collider.tag == "client")
{
interactText.SetActive(true);
Client();
}
else if (hitData.collider.tag == "eat")
{
interactText.SetActive(true);
Eat_Teleport();
}
else
{
interactText.SetActive(false);
}
}
else
{
interactText.SetActive(false);
}
}
void Client()
{
if (Input.GetKeyDown(KeyCode.E))
{
if (interactText.activeInHierarchy)
{
for (int i=0; i < eatDelete.Count;i++)
{
Destroy(eatDelete[i]);
}
eatDelete = new List<GameObject>();
}
}
}
void Eat_Teleport()
{
if (Input.GetKeyDown(KeyCode.E))
{
if (interactText.activeInHierarchy)
{
hitData.transform.position = teleportPosition.transform.position;
hitData.transform.rotation = new Quaternion(0, 0, 0, 0);
eatDelete.Add(hitData.collider.gameObject);
}
}
}
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
У вас eatDelete инициализируется в Client (единственная показанная инициализация, и то там eatDelete используется раньше, чем инициализируется), а объекты в него добавляются в Eat_Teleport.
Код не гарантирует, что Client будет обязательно выполнен перед Eat_Teleport. Более того, в Client произойдёт точно такая же ошибка на "eatDelete.Count". Сделайте так, чтобы eatDelete был гарантированно инициализирован перед вызовом Eat_Teleport, а также перед любым использованием вообще.