C# 我对Unity中的Physics2D.BoxCast感到困惑

C# 我对Unity中的Physics2D.BoxCast感到困惑,c#,unity3d,game-physics,C#,Unity3d,Game Physics,我正在Unity(2019.4.19f1)中使用Physics2D.BoxCast 我在位置==(0,0)处有一个碰撞R2D,比例==(1,1) 然后我调用Physics2D.BoxCast: var hit = Physics2D.BoxCast(new Vector2(0, 2), new Vector2(1, 1), 0, new Vector2(0, -1)); 这是一个如下图所示的X射线投射: 我收到了回音。 但是hit.distance==0.9950001,应该是1。 我想Ph

我正在Unity(2019.4.19f1)中使用Physics2D.BoxCast

我在位置==(0,0)处有一个碰撞R2D,比例==(1,1)
然后我调用Physics2D.BoxCast:

var hit = Physics2D.BoxCast(new Vector2(0, 2), new Vector2(1, 1), 0, new Vector2(0, -1));
这是一个如下图所示的X射线投射:

我收到了回音。
但是hit.distance==0.9950001,应该是1。
我想Physics2D.BoxCast中可能有一些不准确的地方。但我不知道误差有多大

然后我进行一些搜索,发现“默认联系人偏移量”可能与我的问题有关。
我改变了“项目设置”→ 物理2D→ 默认触点偏移量”为0.001(默认值为0.01)。
再次运行代码。但是现在我得到了hit.collider==null

现在我对Physics2D.BoxCast更为困惑。
了解Physics2D.BoxCast的工作原理可能会有所帮助。但我不知道在哪里可以找到它们


新增2021.3.1
我做了几个关于“DefaultContactOffset”的实验()

实验结果表明:
1.如果DefaultContactOffset约为0.002~0.01。大多数情况下,命中距离的误差约为0.005。

2.如果DefaultContactOffset约为0.02~0.1。hit.distance中的错误更大。

我实际上不知道Physics2D.BoxCast,但据我所知,它只是以“速度”将一个盒子移动到目标。现在我在opengl中做了类似的计算,任何像这样的碰撞都会导致这种行为。你不能期望得到100%准确的结果。想象一下,你每移动一帧红色框5个点,而不是一个小比例。你的红盒子会跳过白盒子,你不会得到命中结果

现在互联网上说“减少默认的接触偏移量可能意味着碰撞没有足够的缓冲区来正常工作。”所以我猜Physics2D.BoxCast只需检查两个对象是否会碰撞,而不是它们是否正在碰撞,这就解释了为什么当of设置如此小时会出现空命中


编辑:这是一条评论,但太长了。

谢谢。我做了几个关于“DefaultContactOffset.”()的实验,它看起来是“使用随时间变化的速度”。实验结果表明:___1。如果DefaultContactOffset约为0.002~0.01。大多数情况下,命中距离的误差约为0.005。-->(这看起来像是“使用随时间变化的速度”)\uuuuuuuuuu2。如果DefaultContactOffset约为0.02~0.1。hit.distance中的错误更大。我对BoxCast如何工作的想法是:如果BoxCast的工作方式类似于“随时间使用速度”。那么,当对撞机非常远的时候,它的效率可能会非常低____2.然后我想BoxCast可能会像“尝试距离1,2,4,8,16…”一样工作。但是,如何避免错过对撞机呢____3.然后我想我不知道它是如何工作的。它可能是上述算法和其他几种我不知道的算法的组合。至于当DefaultContactOffset==0.01时hit==null,我仍然有疑问。该算法应与DefaultContactOffset相关联。DefaultContactOffset是关于如何检查碰撞的。“Physics2D.BoxCast只需检查两个对象是否将发生碰撞,而不检查它们是否发生碰撞”无法为我解释所有问题。您从何处发现“减少默认接触偏移可能意味着碰撞没有足够的缓冲区来正常工作。”。我没有在Unity手册中看到它。这个问题是关于,而不是。@Ruzihm你能解释一下吗?对我来说,我认为它是关于Unity的,它是关于Unity的Physics2D.BoxCast函数的。是2018.2之前版本中使用的类似javascript的弃用语言。此问题与中有关,与unityscript无关。有关涉及unityscript的问题的示例,请参见。@Ruzihm了解。谢谢你的帮助。我对Unity很陌生,不知道这一点。