目标:获取光线投射与平面图层的交点。
光线投射绘制一条与平面相交的线(单击鼠标时(。
但是这条线也与路径中的所有东西相交,因此结果点是给出与平面以外的物体的交点。
我将平面层指定为"平面",并且仅在光线投射时将平面层包含在代码中。
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;
}
}