Alexeee
@Alexeee
Разработчик игр

Как получить компонент объекта, полученного рейкастом?

Имеется следующий код:
private void Attack()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
        RaycastHit _hit;
        if (Physics.Raycast(ray, out _hit))
        {
            if (_hit.collider.tag == "tree")
            {
                Hp tt = _hit.GetComponent("Hp") as Hp;
                if (tt != null)
                {
                    tt._curHealth -= 1;
                }
                Debug.Log("Этот объект с тэгом tree");
            }
        }
    }
}

Вопрос: почему я не могу получить компонент из _hit? Может я что-то не так делаю?
  • Вопрос задан
  • 1140 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
RaycastHit это структура, у которой нет метода GetComponent. Такой метод есть у RaycastHit.transform:
private void Attack()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
        RaycastHit _hit;
        if (Physics.Raycast(ray, out _hit))
        {
            if (_hit.collider.tag == "tree")
            {
                Hp tt = _hit.transform.GetComponent<Hp>();
                if (tt != null)
                {
                    tt._curHealth -= 1;
                }
                Debug.Log("Этот объект с тэгом tree");
            }
        }
    }
}

И лучше не пользуйтесь GetComponent с аргументом-строкой, используйте универсальный метод как в примере выше, иначе ваш код сломается, если вы решите переименовать класс.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы