我正在尝试在我正在使用Unity开发的原型中检测碰撞体上的简单点击。问题是,虽然它检测到碰撞,但它有时似乎偏离了目标。
这是我所拥有的
Vector2 point = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
RaycastHit2D hit = Physics2D.Raycast(point, Vector2.zero);
if (hit.collider != null)
{
//Do stuff
}
我希望它只会在对撞机上单独爆炸。 我添加了一些文本日志,以确保它不会碰到其他内容。
这里有一个小图像来解释。蓝色是应该识别点击的地方,红色是我用手指点击的地方,它仍然像我点击蓝色一样识别它。https://gyazo.com/7462de174d30b2d81a30c17f2bbc62fa
尝试这样的事情:
Vector3 screenTouchPos = Input.GetTouch(0).position;
screenTouchPos.z = 1f; // distance to the camera
Vector2 point = Camera.main.ScreenToWorldPoint(screenTouchPos);
这里的解释:ScreenToWorldPoint(( 不起作用
ScreenToWorldPoint 接收一个 Vector3 参数,其中 x 和 y 是屏幕坐标,z 是与相机的距离。由于 Input.mousePosition.z 始终为 0,因此您得到的是相机位置。
精度:这应该只是透视相机投影的问题,而不是正交投影的问题。
编辑:由于这不能解决您的问题,这里有一些调试它的提示(我没有足够的关于您的案例的信息来建议任何事情(:
- 使用
Debug.DrawLine
检查Vector2 point
的值是否正确- 如果是这样,请检查您的碰撞体是否具有正确的尺寸/位置。
- 如果没有,请将
Camera.ViewportPointToRay
与Debug.DrawLine
结合使用,以查看光线是否正确。
好的,我发现了问题。我会把它贴在这里,以防其他人在这种问题上绊倒并且似乎无法让它工作。
简而言之,检查您的相机转换。我的不知何故在 Y 中的偏移量为 1,它把一切都搞砸了。