我的对撞机对象有两个子对象,分别是相机和对撞机(被触发= 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/