Unity3d中的间隔冲突?

时间:2014-10-09 19:07:33

标签: c# unity3d collision

我对以下方法有疑问

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

我真的需要检查一下。有人有一个很好的解决方案吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

我可以想到两种方法:OnCollisionStayPhysics.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

        }
    }

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