我对以下方法有疑问
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
我真的需要检查一下。有人有一个很好的解决方案吗?
非常感谢你!
答案 0 :(得分:0)
我可以想到两种方法:OnCollisionStay和Physics.CheckSphere
的 OnCollisionStay 强>
对于每个碰到刚体/对撞机的碰撞器/刚体,每帧调用一次OnCollisionStay。
在您的情况下,您可以执行类似以下操作:
public class ExampleClass : MonoBehaviour {
void OnCollisionStay() {
// Do Something
}
}
的 Physics.CheckSphere 强>
Physics.CheckSphere会返回 true 。 (如果您需要对撞机列表,请使用Physics.OverlapSphere)。
下面的代码将检查每帧中是否在定义的球体内存在任何对撞机(每当调用更新时)。
public class ExampleClass : MonoBehaviour {
public float sphereRadius;
void Update() {
if (Physics.CheckSphere(transform.position, sphereRadius))
//Do something
}
}
(如果您想定义自己的时间间隔而不是每个帧,您可以将代码置于任一方法的协同例程中。)