为什么我的光线投射打错了对象



我正试图使用带有透视投影的相机在3d Unity环境中实现拖放功能。

以下代码应生成从当前鼠标(最终,触摸(位置到屏幕上鼠标下方对象的光线。

private Ray GenerateMouseRay()
{
Vector3 mousePositionFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.farClipPlane);
Vector3 mousePositionNear = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);
Vector3 positionNear = Camera.main.ScreenToWorldPoint(mousePositionNear);
Vector3 positionFar = Camera.main.ScreenToWorldPoint(mousePositionFar);
Ray mouseRay = new Ray(positionNear, positionFar - positionNear);
return mouseRay;
}

在我的"更新"方法中,当检测到鼠标活动时,我将打印光线击中的对象的名称和坐标。一旦我正确地投射光线,我将能够实现拖放功能。

// Update is called once per frame
void Update()
{
//CalculatePosition();
if (Input.GetMouseButtonDown(0))
{
Ray mouseRay = GenerateMouseRay();
RaycastHit hit;
if(Physics.Raycast(mouseRay.origin, mouseRay.direction, out hit))
{
hitObject = hit.transform.gameObject;
objectPlane = new Plane(Camera.main.transform.forward * -1, hitObject.transform.position);
Debug.Log(hitObject.name);
Debug.Log(hitObject.transform.position.x + ", " + hitObject.transform.position.y + ", " + hitObject.transform.position.z);
}
}
}

预期输出:游戏者13.57,-8.5,6.07

实际输出:海洋水域.55536325,-1.1218224

如有任何协助,我们将不胜感激。

通过禁用水上飞机上的碰撞解决。

相关内容

最新更新