Как я могу проверить, смотрит ли игрок на объект? Единство

#c# #unity3d

Вопрос:

Я хочу иметь сферы, в которые вы можете телепортироваться, когда нажимаете e, и когда вы смотрите на сферу, в основном я хочу проверить, смотрит ли игрок на сферу.

Комментарии:

1. Сделайте снимок радиопередачи и определите, пересекается ли она с объектами, которые вы ищете. Вы также можете ограничить слой, для которого вы создаете, только взаимодействующими объектами.

2. Определите «смотреть» более четко … Raycast хорош, если вы хотите проверить точное направление .. или достаточно, чтобы объект находился в определенном диапазоне?

Ответ №1:

Вы должны использовать Physics.Raycast . Это отбрасывает луч (бесконечную линию) из точки а в направлении определенного Вектора3. Вы должны использовать этот код:

 //set mask to the mask of the object you
//want to look at in the editor.
public LayerMask mask; 

private void Update()
{
    if(Physics.Raycast(transform.position, transform.forward, out var hit, Mathf.Infinity, mask))
    {
        var obj = hit.collider.gameObject;
    
        Debug.Log($"looking at {obj.name}", this);
    }
}
 

Вот некоторые дополнительные ресурсы:

Комментарии:

1. Так могу ли я добавить это в плеер?

2. Прикрепите его к камере или к чему угодно, из чего вы хотите провести линию (если у вас есть стандартная игра, прикрепите ее к камере). Просто добавьте его в функцию обновления, и все должно работать. Если это не скажет мне, что произойдет.

3. Исключение NullReferenceException: Ссылка на объект не установлена для экземпляра объекта LookingAtOrb.Update () (в Assets/LookingAtOrb.cs:21) — это то, что происходит, когда я прикрепляю его к камере

4. Я изменил его. Скажите мне, если вы получите еще одну ошибку.

5. АктивыLookingAtOrb.cs(27,2): ошибка CS1513: } ожидалось, что у него есть закрывающий столбец, однако