光线投射点不在平面层上(奇怪的位置)?
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;
}
}
目标:获取光线投射与平面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;
}
}