2014-10-09 73 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 

     } 
    } 

(如果要定義自己的間隔,而不是每一幀的你可以把對兩種方法協同例程中的代碼)。