区间中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

我真的需要仔细检查。有人能解决这个问题吗?

提前非常感谢!

区间中Unity3d中的碰撞

我能想到两种方法: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
        }
    }

(如果您想定义自己的间隔,而不是每个帧,您可以将代码放在任一方法的协同例程中)