微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我对 Unity 中的 Physics2D.BoxCast 感到困惑

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

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

var hit = Physics2D.BoxCast(new Vector2(0,2),new Vector2(1,1),new Vector2(0,-1));

这是一个 Box Ray Cast,如下图所示:

enter image description here

我返回了一个命中。
但是hit.distance == 0.9950001,应该是1。
我想 Physics2D.BoxCast 可能存在一些不准确之处。但我不知道误差有多大。

然后我进行了一些搜索,发现“认接触偏移”可能与我的问题有关。
我将“项目设置 → Physics2D → 认接触偏移”更改为 0.001(认值为 0.01)。
再次运行代码。但现在我得到了 hit.collider == null。

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


添加 2021.3.1
我做了几个关于“DefaultContactOffset”的实验。(link)
实验结果表明:
1.如果 DefaultContactOffset 大约是 0.002~0.01。大多数时候,hit.distance 的误差在 0.005 左右。
2.如果 DefaultContactOffset 大约是 0.02~0.1。 hit.distance 的误差更大。

解决方法

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

现在互联网说“减少默认接触偏移可能意味着碰撞没有足够的缓冲区来正常工作。”所以我猜Physics2D.BoxCast只是检查2个对象是否会发生碰撞而不是它们是否正在发生碰撞将解释为什么当您将偏移量设置得如此小时会得到空值。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。