Raycast работает только когда скрипт находится на основной камере?

Я хочу, чтобы raycast работал как мышь (или Touch) с основной камеры, а когда щелкнешь и нажмешь на объект, это вызовет что-то. У меня есть скрипт в обновлении объекта (), как показано ниже:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);   
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {
  // Debug output to confirm it is hit. 
}

Это довольно стандартный скрипт, который я вижу во многих уроках. Тем не менее, это не попадает в строку отладки.

Единственное отличие состоит в том, что это обновление объекта, а не обновление скрипта основной камеры (). Это имеет значение?

должен ли код в скрипте обновления принадлежать исходному игровому объекту (или камере), излучающему луч? или это может быть в обновлении () прикрепленного скрипта любого игрового объекта?

У объекта, который у меня есть, нет коллайдера, нужен ли он на объекте, чтобы луч столкнулся с ним?

1 ответ

Решение

С Physics.Raycast Вы можете стрелять лучом из любой точки в любом направлении. Не имеет значения, к какому сценарию gameObject прикреплен скрипт, если вы можете каким-то образом рассчитать начальную точку и направление.

Проблема в том, что на ваших лучевых мишенях нет коллайдеров. Raycasting только вычисляет, на какой коллайдер попадает луч.

Поэтому добавление коллайдеров решит вашу проблему. Просто помните, что если вы используете 2D коллайдеры из вкладки Physics2D, вам нужно использовать Physics2d.Raycast, И если вы используете 3D-коллайдеры на вкладке Физика, вам нужно использовать Physics.Raycast,

Другие вопросы по тегам