我的对撞机对象有两个子对象,分别是相机和对撞机(被触发= true)。我需要检测碰撞子对撞机并识别该子对撞机所有触摸的物体。


gameObject(CapsuleCollider(isTriggered = false),刚体)


gameObject(相机)
gameObject(CapsuleCollider(isTriggered = true))



我认为这是错误的代码,但也许不是,至少出于某种想像力:

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

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

    }

最佳答案

您需要为您的孩子添加一个单行为。否则您将无法检测到。如果要从父游戏对象中进行检查,则on this link有一个非常好的解决方案。我从中复制了代码,然后从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
     }
 }

关于c# - 如何检测 child 碰撞其他对撞机?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48429269/

10-11 00:43