连接到刚体时获取统一对撞机的游戏对象

时间:2019-01-10 21:43:13

标签: c# unity3d

我有一个具有刚体的游戏对象,然后有一组带有子画面和对撞机的子游戏​​对象,其中每个对撞机都附加到父级的刚体上。 这对于物理和碰撞效果很好,因为整个对象组都会反弹并从风景中碰撞。 但是,当两组碰撞时,我希望它们对单个子游戏对象之一造成损坏。 我在每个子对象上都有一个OnCollisionEnter2D(Collision2D coll)(其中有碰撞器),但是当它们使用coll.gameObject与另一组碰撞时,返回的游戏对象始终是父对象而不是单个子对象。 / p>

长话短说: 将对撞机的游戏对象附着到具有刚体的另一个游戏对象上,有什么方法可以得到?

注意:我已经看到一些使用射线投射来找到对象的解决方案,但这似乎是很多不必要的工作。

注2:我也看到了使用触发器的选项,但是我更喜欢碰撞,因为它也可以处理物理问题。

private void OnCollisionEnter2D(Collision2D coll)
{
        Debug.Log(coll.gameObject.name); // Showing the parent
        ShipPiece sp = coll.gameObject.GetComponent<Piece>(); // Looking for the individual piece
        if (sp != null)
        {
            // Apply the damage to the other piece based off the weight of this piece
            coll.gameObject.SendMessage("ApplyDamage", weight*10);
        }
}

很明显,我可以在碰撞中的第一个碎片中找到它,因为它是OnCollisionEnter2D所在的类,但是我无法找到一种方法来使第二个碎片与第二个碎片碰撞。

1 个答案:

答案 0 :(得分:2)

当您确实需要gameObject本身的Collision2D属性时,您尝试获取gameObject对象的Collider2D属性。 Collision2D具有colliderotherCollider属性,您可以使用:

private void OnCollisionEnter2D(Collision2D coll)
{
    Debug.Log(coll.collider.gameObject.name);
    Debug.Log(coll.otherCollider.gameObject.name);
    ...   
}