光线投射点不在平面层上(奇怪的位置)?

Raycast point is not on plane Layer (wierd position)?

目标:获取光线投射与平面Layer的交点。

光线投射绘制一条与平面相交的线(单击鼠标)。

但是这条线也与它路径上的所有东西相交,所以结果点是给出与平面以外的物体的交点。

我已将平面层指定为"Plane",并且仅在光线投射时将平面层包含在代码中。

        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;
            }
        }

发生的事情是游戏对象的位置覆盖了它的旧位置,直到对象被相机剪裁。

因此,您将光线、RayCastHit 和数字传递给 Physics.Raycast,它会像这样识别它们:

Physics.Raycast (ray, hit, distance)

任何时候使用图层蒙版进行光线投射时,都需要先设置投射距离,因为所有光线投射方法都希望将其作为命中后使用的第一个数字。这是一个应该使用 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;
    } 
}