Raycast от камеры до положения мыши в игровом мире - PullRequest
0 голосов
/ 27 мая 2018

Когда мышь находится у двери (красная область), я хочу что-то сделать.Я пытаюсь разыграть Луча, но Луч не попадает в Дверь, и я не могу найти, где именно он бьет.И как я могу Debug.DrawRay этот луч?

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, Mathf.Infinity)) {
    if(hit.collider.tag == "InteractiveDoor"){
        doorInteractGameObject.SetActive(true);
    }else{
        doorInteractGameObject.SetActive(false);
    }

Изображение Единства

Ответы [ 3 ]

0 голосов
/ 27 мая 2018

Возможно, вам потребуется создать LayerMask и добавить его в параметры для Physics.Raycast;также убедитесь, что на двери есть коллайдер.Вы будете удивлены, сколько раз я просто забыл добавить коллайдер.

С точки зрения рисования луча на случай, если по какой-то причине это не работает.Используйте Debug.DrawRay.Я рекомендую поместить его в FixedUpdate () или Update ().Цвет и длительность вы можете установить по своему усмотрению, но я рекомендую, чтобы параметр deepTest был ложным, поскольку вы хотите, чтобы луч рисовался независимо.Тогда назовите это как:

Debug.DrawRay(ray.origin, ray.direction, <color>, <duration>, false);
0 голосов
/ 19 декабря 2018

Исправлено: перейдите на камеру и установите для тега значение MainCamera '.Или вы можете изменить свой код, чтобы иметь переменную камеры и использовать эту переменную вместо Camera.main.

0 голосов
/ 27 мая 2018

Вы можете нарисовать этот луч как:

Debug.DrawRay(ray.origin, ray.direction);

или

Debug.DrawRay(Camera.main.transform.position, Camera.main.ScreenPointToRay(Input.mousePosition).direction);

Вариант 1 является более прямым, когда вы определили свой луч, но вариант 2 дает вам больший выборпоиграйте, если окажется, что этот Луч ведет себя не так, как вы ожидаете.

camera.ScreenPointToRay ожидает Vector3, но Input.mousePosition возвращает Vector2.Документы Unity для Vector3 и Vector2 показывают, что вы должны иметь возможность использовать Vector2 как Vector3 неявно, и он заполнит компонент z как 0, но если Debug.DrawRay показывает, что луч - это проблема, то вам нужно добавить0. Может быть что-то вроде:

Ray ray = Camera.main.ScreenPointToRay(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));
...