文章目录

需求
  • 我需要让红框圈出来的这个方块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就不见了,
    在这里插入图片描述
  • 当我们挤压的更严重的时候
  • 碰撞体之间是可以产生些许的交叉的。在这里插入图片描述
  • 所以问题的解决办法也很简单。要么直接规避掉,要么就是多加一层判断。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐