Точка радиопередачи не находится на плоскости слоя (странное положение)? - PullRequest
0 голосов
/ 01 июня 2019

Цель: получить точку пересечения лучевой трансляции со слоем плоскости.

Лучевая трансляция рисует линию, которая пересекает плоскость (по щелчку мыши).

Но линия также пересекаетсявсе на своем пути, поэтому конечная точка дает точку пересечения с объектами, отличными от плоскости.

Я назначил слой плоскости как «Плоскость» и включил в код слой плоскоститолько при радиопередаче.

        if (Input.GetMouseButton(0))
        {
            RaycastHit hit;
            int layerMask = (1 << 8); // Plane's Layer
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast (ray, out hit, layerMask)) {
                transform.position = hit.point;
            }
        }

Происходит следующее: позиция gameObject переопределяет свою старую позицию до тех пор, пока объект не обрежется камерой.

1 Ответ

0 голосов
/ 02 июня 2019

Итак, вы передаете луч, RayCastHit и число в Physics.Raycast, и он распознает их следующим образом:

Physics.Raycast (ray, hit, distance)

Каждый раз, когда вы делаете Raycast смаску слоя, вам нужно сначала установить расстояние приведения, потому что это то, что все методы raycast ожидают в качестве первого числа после использования.Вот версия, которая должна работать, используя Mathf.Infinity в качестве расстояния:

if (Input.GetMouseButton(0)) {
    RaycastHit hit;
    int layerMask = (1 << 8); // Plane's Layer
    var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    if (Physics.Raycast (ray, out hit, Mathf.Infinity, layerMask)) {
        transform.position = hit.point;
    } 
}
...