簡體   English   中英

在Unity3d中發生碰撞?

[英]Collision in Unity3d in an intervall?

我對以下方法有疑問

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

我真的需要經常檢查。 有人對此有好的解決方案嗎?

提前非常感謝您!

我可以想到2種方法: OnCollisionStayPhysics.CheckSphere


OnCollisionStay


對於每一個與剛體/碰撞體接觸的碰撞器/剛體,OnCollisionStay每幀調用一次。

在您的情況下,您可以執行以下操作:

public class ExampleClass : MonoBehaviour {
    void OnCollisionStay() {

            // Do Something

    }
}  


物理檢查球


如果球體內有任何碰撞體,則Physics.CheckSphere返回true (如果需要對撞機列表,請使用Physics.OverlapSphere )。

下面的代碼將檢查每幀(無論何時調用更新)在定義的球體內是否存在任何對撞機。

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

           //Do something

        }
    }

(如果要定義自己的間隔而不是每個幀,則可以將代碼放在這兩種方法的協同例程中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM