我正在尝试使用Unity制作某种模拟程序。模拟包括从飞机和地形发射的导弹。我从另一个使用套接字连接的程序中获取了导弹运动所需的坐标数据。我创建了爆炸效果,使导弹在导弹和地形相撞后立即爆炸。但是爆炸效果不会以任何方式触发。
我使用OnCollisionEnter()
方法来检测碰撞,但是该方法似乎不起作用。
导弹具有自己的刚体和对撞机,地形具有Terrain Collider,但仍未检测到碰撞,导弹也穿过了地形。
此错误的可能原因是什么?
如以上评论部分所述(我没有足够的代表参与讨论,但将提供解决方案),您需要启用连续冲突检测。完成后,我们可以继续下一步。
在更新中与刚体进行交互通常是一种不好的做法,它可能会导致各种奇怪的错误,因此我不建议这样做。话虽这么说,我认为这不是造成您问题的原因。如@HumanWrites所述,您正在手动移动每个帧的位置,这会使您的导弹从不实际与网格碰撞。解决方案是:
rb.MovePosition(Vector3.MoveTowards(...))
原因是,通过在刚体上使用该方法,您可以通知物理引擎您要从一个位置移动到另一个位置,并且您希望物理学代替您直接执行此操作。这使它可以在当前位置和目标位置之间“扫描”,并检测沿途发生的任何碰撞。
您的导弹运动太快,以至于无法真正接触到框架内的网格,因此您需要依靠物理引擎来进行扫掠检查。