区间中Unity3d中的碰撞
本文关键字:碰撞 Unity3d 区间 | 更新日期: 2023-09-27 18:26:03
我对以下方法有个问题
void OnCollisionEnter2D(Collision2D ext_coll)
{
// Do something
}
除了一种情况外,这种方法效果很好。比方说,我想不断地检查,比如每10毫秒左右,如果我在地上,意味着我是否碰撞。对撞机方法只运行一次!意思是当我与某个东西相撞时,它会准时运行,就是这样。我想要的是不断检查我是否相撞的东西,比如这样的东西:
10MS -> NOT COLLIDING
20MS -> NOT COLLIDING
30MS -> NOT COLLIDING
40MS -> NOT COLLIDING
50MS -> COLLIDING
60MS -> COLLIDING
70MS -> COLLIDING
80MS -> NOT COLLIDING
90MS -> NOT COLLIDING
我真的需要仔细检查。有人能解决这个问题吗?
提前非常感谢!
我能想到两种方法:OnCollisionStay和Physics.CheckSphere
OnCollisionStay
对于接触刚体/碰撞器的每个碰撞器/刚体,每帧调用一次OnCollisionStay。
在你的情况下,你可以做类似于以下的事情:
public class ExampleClass : MonoBehaviour {
void OnCollisionStay() {
// Do Something
}
}
物理.CheckSphere
如果球体内有任何碰撞器,Physics.CheckSphere将返回true。(如果你需要对撞机列表,请使用Physics.OverlapSphere)。
下面的代码将在每帧(每当调用更新时)检查定义的球体内是否有任何碰撞器。
public class ExampleClass : MonoBehaviour {
public float sphereRadius;
void Update() {
if (Physics.CheckSphere(transform.position, sphereRadius))
//Do something
}
}
(如果您想定义自己的间隔,而不是每个帧,您可以将代码放在任一方法的协同例程中)