移动设备上的2D光线投射给出了奇怪的结果



我正在尝试在我正在使用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.ViewportPointToRayDebug.DrawLine结合使用,以查看光线是否正确。

好的,我发现了问题。我会把它贴在这里,以防其他人在这种问题上绊倒并且似乎无法让它工作。

简而言之,检查您的相机转换。我的不知何故在 Y 中的偏移量为 1,它把一切都搞砸了。

相关内容

  • 没有找到相关文章

最新更新