我有一枚硬币RigidBody
和围绕它的墙壁与盒子对撞机。出于试用目的,我已将以下代码应用于硬币。
private void OnMouseDown()
{
rigidbody.AddForce(30.0f, 0f, 5.0f, ForceMode.Impulse);
}
但是,有时硬币会穿过墙壁,但是当我将速度从30点增加到50点时,它会在第一次点击时穿过墙壁。我搜索了很多东西,但除了DontGoThroughThings脚本之外什么都没有,这对我来说不起作用,或者我真的不知道如何使用它。
我总是在硬币上添加连续动态并在墙壁上连续碰撞检测,但仍然无法正常工作。
答案 0 :(得分:4)
可能的解决方案。
你有一个简单的解决方案,它不会像它应该的那样准确,而且更难以完全准确。
第一个解决方案是根据你的硬币可以获得的最大速度增加对撞机的大小,这样对撞机就足够大,以便在一帧到另一帧之间不会错过碰撞。
第二个也是更难的解决方案是为你的碰撞检测添加辅助功能,进行某种安全检查。例如,使用物理光线投射。您可以将光线投射设置为向前方向,并确定该对象是否是一次非常大的碰撞,如果是,并且一旦该对象不再被光线投射碰撞,那么您的碰撞检测失败了,这样您就可以通过辅助来确认并调用碰撞状态。
我希望它对我的英语有所帮助和抱歉。如果你没有强调它,我可以帮助你使用代码,但我需要你的项目中的一些代码。
答案 1 :(得分:1)
查看对撞机是否未选中“Is Trigger”。 另外,检查gameObjects是否有碰撞器。
答案 2 :(得分:0)
我多次遇到这个问题..
确保你的硬币的Rigidbody有“Kinamatic”错误,是Triggger:false,
墙壁的“触发器”也是错误的。
答案 3 :(得分:0)
您可以保存每次更新的速度和位置,然后测试越界,如果硬币离开有效区域,您可以在最后一个有效位置恢复它,或者如果您想要自己绘制碰撞