2014-10-09 88 views
0

我有以下方法Unity3d碰撞在intervall?

void OnCollisionEnter2D(Collision2D ext_coll) 
{ 
     // Do something 
} 

此方法perefectly除了一种情况的问题。比方说,我想不断检查,就像每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

有迹象表明,我能想到的2种方法:OnCollisionStayPhysics.CheckSphere


OnCollisionStay


OnCollisionStay每帧调用一次,每对撞机/刚体即感人刚体/对撞机。

你的情况,你可以做类似如下的内容:

public class ExampleClass : MonoBehaviour { 
    void OnCollisionStay() { 

      // Do Something 

    } 
} 


Physics.CheckSphere


Physics.CheckSphere回报真正如果有任何内对撞机球体。 (如果您需要碰撞体列表,请使用Physics.OverlapSphere)。

下面的代码将检查每帧中定义的球体内是否存在任何碰撞器(每当调用更新时)。

public class ExampleClass : MonoBehaviour { 
    public float sphereRadius; 
    void Update() { 
     if (Physics.CheckSphere(transform.position, sphereRadius)) 

      //Do something 

     } 
    } 

(如果要定义自己的间隔,而不是每一帧的你可以把对两种方法协同例程中的代码)。