簡體   English   中英

Unity - 如何從父GameObject檢測子對象的沖突?

[英]Unity - How to detect collision on a child object from the parent GameObject?

我正在使用Unity 5進行2D游戲,我遇到了兒童GameObject對撞機的問題。 我想檢測Child GameObject與另一個對象之間的沖突,從父腳本執行此操作並使用標記。

按照下面的父腳本:

 void OnCollisionEnter2D(Collision2D hit) {

    if(hit.transform.tag == "Enemy"){

        this.playerRigidbody.AddForce(new Vector2(0, this.forceJump));

    }

 }

“Enemy”標簽是另一個與我的玩家孩子的碰撞器碰撞的物體。 我想檢測子對象和另一個對象之間的沖突,我在很多類似的論壇中搜索過關於Unity但我無法解決我的問題。 有人可以幫我解決這個問題嗎?

發生沖突時,Unity將在層次結構中搜索最近的Rigidbody並在同一GameObject上運行任何腳本。

因此,簡單的方法是使用腳本確保剛體在父對象上。 這是一個示例層次結構:

    • 孩子A.
      • 孩子B.

家長有:

  • 一個剛體2D
  • 劇本

B兒童有:

  • Box Collider 2D

當盒式對撞機與某些東西發生碰撞時,該事件將直接通過Child A冒泡並被父級的Rigidbody接收,這將導致腳本運行。

如果你不能把剛體放在父母身上..

出於性能原因,Unity不會將事件在層次結構中冒泡。 所以,你的其他選擇是......

  • 向捕獲碰撞的子項添加一個腳本並在那里處理它。 如果需要,您可以將事件轉發到父腳本,如下所示:

     void OnCollisionEnter2D(Collision2D hit) { // Forward to the parent (or just deal with it here). // Let's say it has a script called "PlayerCollisionHelper" on it: PlayerCollisionHelper parentScript = transform.parent.GetComponent<PlayerCollisionHelper>(); // Let it know a collision happened: parentScript.CollisionFromChild(hit); } 
    • 或者是“另一個”對象上的腳本,以便從它的角度捕獲該碰撞事件。

確保子對象沒有剛體並確保對撞器屬性正確。 看看這個在復合撞機部分文章對兒童的對象結合對撞機的更多信息。

暫無
暫無

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

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