gpt4 book ai didi

c# - 如何防止刚体穿过其他碰撞体

转载 作者:行者123 更新时间:2023-12-04 19:07:13 25 4
gpt4 key购买 nike

我有一枚硬币 RigidBody和它周围的墙壁与盒子碰撞器。出于试用目的,我已将以下代码应用于硬币。

private void OnMouseDown() 
{
rigidbody.AddForce(30.0f, 0f, 5.0f, ForceMode.Impulse);
}

但是,有时硬币会穿过墙壁,但是当我将速度从 30 点提高到 50 点时,它会在第一次点击时穿过墙壁。我在谷歌上搜索了很多,除了对我不起作用的 DontGoThroughThings 脚本之外,仍然一无所获,或者我真的不知道如何使用它。

我总是在硬币上添加连续动态并在墙上添加连续碰撞检测,但仍然不起作用。

最佳答案

物理碰撞检测的问题在于,有时当物体的速度过高时(在这种情况下,由于向刚体施加了力),将无法检测到碰撞。原因是您正在执行的代码以每秒 x 步的速度运行,因此有时刚体会在一步到另一步之间通过对撞机。假设你有一个时速 100 英里的球和一堵 1 英尺宽的墙,每次运行代码时,代码都会根据它的物理特性将球移动一定数量的英尺,因此球的运动是虚拟的但这不是真正的物理运动,因此可能会发生这样的情况:从一个步骤到另一个步骤,球可以从 a 点移动到 b 点,而墙壁位于这些点之间,因此不会检测到碰撞。

可能的解决方案。

你有一个简单的解决方案,它不会像它应该的那样准确,而一个更难的解决方案将完全准确。

第一个解决方案将增加碰撞器的大小,根据您的硬币可以获得的最大速度,这样碰撞器将足够大,以便在一帧到另一帧之间不会错过碰撞。

第二个更难的解决方案是为您的碰撞检测添加一个辅助工具,即某种安全检查。例如使用物理光线转换。您可以将光线转换设置为向前方向并确定该对象是否是即将发生的碰撞,如果确实如此,并且一旦对象不再被光线转换碰撞,那么您的碰撞检测就失败了,这样您就可以让您的辅助设备确认并调用碰撞状态。

我希望它对我的英语有所帮助和抱歉。如果您不太了解它,我可以帮助您编写代码,但我需要您项目中的一些代码。

关于c# - 如何防止刚体穿过其他碰撞体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com