2015-01-25 1 views
1

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

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

Это довольно стандартный сценарий, который я вижу из многих учебников. Однако он не попадает в строку Debug.

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

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

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

ответ

1

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

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

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

+0

Спасибо. Да ... как только я ставлю коллайдер, он работает. Благодарю. :) – murvinlai