当Unity Collider附加到Rigidbody时,获取游戏对象

4
我有一个游戏物体,上面有一个刚体和一组带有精灵和碰撞器的子游戏物体,其中每个碰撞器都附加在父物体的刚体上。这对于物理和碰撞很有用,因为整个对象组将弹跳并与场景产生碰撞。然而,当两个组相撞时,我希望其中一个子游戏物体会受到损坏。我在每个子对象上(它们具有碰撞器)都有一个OnCollisionEnter2D(Collision2D coll),但是当它们与另一个组发生碰撞时,使用coll.gameObject返回的游戏对象总是父对象而不是单个子对象。
简而言之: 是否有办法在碰撞器附加在具有刚体的另一个游戏对象上时获取碰撞器所属的游戏对象?
注意:我已经看到一些解决方案使用光线投射来查找对象,但这似乎是很多不必要的工作。
注意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);
        }
}

很明显,我可以保留第一个Piece的碰撞,因为OnCollisionEnter2D存在于该类中,但我无法想出一种方法来获取第二个Piece它正在与其碰撞。

1个回答

7
你试图获取Collision2D对象的gameObject属性,但实际上你需要获取Collider2D本身的gameObject属性。 Collision2D具有colliderotherCollider属性,你可以使用它们:
private void OnCollisionEnter2D(Collision2D coll)
{
    Debug.Log(coll.collider.gameObject.name);
    Debug.Log(coll.otherCollider.gameObject.name);
    ...   
}

1
谢谢!简单的回答,解决了问题。 - Cutch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接