为啥我的光线投射会击中错误的对象?
Posted
技术标签:
【中文标题】为啥我的光线投射会击中错误的对象?【英文标题】:Why is my raycast hitting the wrong object?为什么我的光线投射会击中错误的对象? 【发布时间】:2021-03-21 02:44:09 【问题描述】:我正在尝试使用带有透视投影的相机在 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 方法中,当检测到鼠标活动时,我会打印射线击中对象的名称和坐标。一旦我让光线正确投射,我将能够实现拖放功能。
// 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
实际输出: 海洋水域 .5536325, -1.1, 1.218224
感谢任何帮助。
【问题讨论】:
你的玩家需要一个对撞机才能让光线投射产生影响。是这样吗? 我在玩家对象上有一个刚体和一个碰撞器。 【参考方案1】:通过在我的水上飞机上禁用碰撞来解决。
【讨论】:
您可能希望通过使用LayerMask in your Physics.Raycast call来限制您尝试与之交互的对象以上是关于为啥我的光线投射会击中错误的对象?的主要内容,如果未能解决你的问题,请参考以下文章