unity物理引擎因为挤压导致的一些bug
文章目录需求研究需求我需要让红框圈出来的这个方块A发射一条射线,检测右边是否存在方块B和他发生碰撞,我把检测点设置在A方块内部,使用的是这个APIPhysics2D.RaycastNonAlloc(point.position, dirVector, hit2DInfo, 0.4f, CheckMask);因为A和B都是方块,所以无法利用CheckMask本身来做出划分按道理说,检测点应该先穿透A
·
需求
- 我需要让红框圈出来的这个方块A发射一条射线,检测右边是否存在方块B和他发生碰撞,
- 我把检测点设置在A方块内部,使用的是这个API
Physics2D.RaycastNonAlloc(point.position, dirVector, hit2DInfo, 0.4f, CheckMask);
- 因为A和B都是方块,所以无法利用
CheckMask
本身来做出划分 - 按道理说,检测点应该先穿透A的碰撞体,再穿透B的碰撞体,因此在
hit2DInfo
里面存放的信息,第二位应该是B的信息 - 但是偶尔会出现特殊情况,即第一位是B,第二位是A
- 我怀疑是B的碰撞体交叉到A的内部,导致射线检测的时候先检测到了B
- 因为我这个需要用到递归,就导致了栈溢出bug
研究
- 当人不去挤压方块的时候,两者之间有一个Contact Offset,
- 可是当人挤压的时候,这个Offset就不见了,
- 当我们挤压的更严重的时候
- 碰撞体之间是可以产生些许的交叉的。
- 所以问题的解决办法也很简单。要么直接规避掉,要么就是多加一层判断。
更多推荐
已为社区贡献3条内容
所有评论(0)