Unity3d Physics2D.Raycast随机返回null

Unity3d Physics2D.Raycast随机返回null,unity3d,Unity3d,我有一块有电池的板,有些是正常的,有些是墙。我想在两点之间画一条线,知道它是否与墙细胞相撞 这是我的密码: private void OnDrawGizmosSelected() { RaycastHit2D raycast = Physics2D.Raycast(from, to, Vector2.Distance(from, to), layerMask); if (raycast.collider == null) { Gizmos.color = Color.green;

我有一块有电池的板,有些是正常的,有些是墙。我想在两点之间画一条线,知道它是否与墙细胞相撞

这是我的密码:

private void OnDrawGizmosSelected()
{
    RaycastHit2D raycast = Physics2D.Raycast(from, to, Vector2.Distance(from, to), layerMask);
    if (raycast.collider == null) { Gizmos.color = Color.green; Gizmos.DrawLine(from, to); }
    else { Gizmos.color = Color.red; Gizmos.DrawLine(from, to); }
}
它80%的时间都能工作。在地图上的某些点上,它根本不起作用

好的时候举个例子

在这种情况下,它是好的,但如果我向下走我的右下角点约0.2,它不再工作了

不正常时的示例

我的线是绿色的,就像根本没有墙一样

我已将BoxCollide R2D和我的层设置在墙单元上。

中的第二个参数是“方向”,而不是光线的末端(与此不同,您正确调用它是因为它使用开始和结束作为参数)。你想要这样的东西:

Vector2 direction = to - from;
Physics2D.Raycast(from, direction.normalized, direction.magnitude, layerMask);
您的继续
if
语句中还有一些重复的代码可以清除:

Gizmos.Color = (raycast.collider == null) ? Color.green : Color.red;
Gizmos.DrawLine(from, to);

嘿,谢谢你的回答!关于距离参数,你是对的。。。但是即使进行了更正,也无法解决我的问题:/噢,我知道重复的代码是出于测试目的,但无论如何都会删除此代码^^好的,您的解决方案有效,但我必须改变计算矢量2距离的方式。我做了“从到”,现在一切都正常了:)泰!