如何检测儿童碰撞其他碰撞器?

时间:2018-01-24 18:27:22

标签: c# unity3d

我的对撞机对象有两个子对象,有摄像机和对撞机(Triggered = true)。我需要检测碰撞儿童对撞机并通过这个儿童对撞机识别所有被触碰的物体。

  • gameObject(CapsuleCollider(isTriggered = false),Rigidbody)
    • 游戏物体(摄像机)
    • gameObject(CapsuleCollider(isTriggered = true))

我认为这是错误的代码,但也许不是,至少只是想象一下:

CapsuleCollider legsTrigger;  
void Update()
    {
        legsTrigger= GetComponentInChildren<CapsuleCollider>();

        if(legsTrigger.contact...){
          Debug.Log("This is : ");
          Debug.Log(legsTrigger.gameObject.tag);
        }

    }

1 个答案:

答案 0 :(得分:3)

您需要为您的孩子添加monobehaviour。否则你无法检测到。如果你想从你的父游戏对象on this link检查它,rsodre有一个非常好的解决方案。{3}}。我从中复制了代码并从2D对撞机转换为3D。

首先,在父游戏对象和孩子之间创建一个Bridge脚本

 public class ColliderBridge : MonoBehaviour
 {
     ColliderListener _listener;
     public void Initialize(ColliderListener l)
     {
         _listener l;
     }
     void OnCollisionEnter(Collision collision)
     {
         _listener.OnCollisionEnter(collision);
     }
     void OnTriggerEnter(Collider other)
     {
         _listener.OnTriggerEnter(other);
     }
 }

然后,将此ColliderBridge脚本添加到所有子级,然后像这样从父级侦听碰撞事件(将ColliderListener脚本添加到父级游戏对象)。

public class ColliderListener : MonoBehaviour
 {
     void Awake()
     {
         // Check if Colider is in another GameObject
         Collider collider = GetComponentInChildren<Collider>();
         if (collider.gameObject != gameObject)
         {
             ColliderBridge cb = collider.gameObject.AddComponent<ColliderBridge>();
             cb.Initialize(this);
         }
     }
     public void OnCollisionEnter(Collision collision)
     {
         // Do your stuff here
     }
     public void OnTriggerEnter(Collider other)
     {
         // Do your stuff here
     }
 }