c# - 当它附加到刚体时获取统一对撞机的游戏对象

标签 c# unity3d

我有一个具有刚体的游戏对象,然后是一组带有 Sprite 和碰撞器的子游戏对象,其中每个碰撞器都附加到父级的刚体。 这适用于物理和碰撞,因为整个对象组将从场景中反弹和碰撞。 但是,当两组发生碰撞时,我希望它们对单个子游戏对象之一造成伤害。 我在每个子对象(上面有对撞机)上都有一个 OnCollisionEnter2D(Collision2D coll) 但是,当它们使用 coll.gameObject 与另一个组发生碰撞时,返回的游戏对象始终是父对象而不是单个子对象。

长话短说: 有什么办法可以获取一个collider的游戏对象,当它附加到另一个具有刚体的游戏对象时?

注意:我见过一些使用光线转换来查找对象的解决方案,但这似乎有很多不必要的工作。

注意 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。

最佳答案

当您真正想要 Collider2D 的 gameObject 属性时,您正试图获取 Collision2D 对象的 gameObject 属性 本身。 Collision2D具有您可以使用的 colliderotherCollider 属性:

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

关于c# - 当它附加到刚体时获取统一对撞机的游戏对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54137327/

相关文章:

c# - 在 RDotNet.dll 中发生类型为 'System.StackOverflowException' 的未处理异常以在 Web 应用程序中加载 R 库

c# - 使用VS2017发布WebAPI,卡在 `preparing profile`

c# - 在全屏 3D 应用程序中获取桌面屏幕截图

javascript - 游戏如何删除数据库中的对象但同时将其动画化

c# - 64 位 Windows 上的注册表重定向

C#:使方法的参数不可更改的最佳方法

c# - 我可以使用什么(也许是设计模式?)来避免这种 ISP 违规行为?使用 Asp.net 底页

c# - TimeZoneInfo.FindSystemTimeZoneById() 在 Unity 应用程序中抛出异常

c# - Unity C# : Camera. main 返回null?

c# - 获取碰撞接触力