如何忽略对象之间的碰撞

时间:2017-04-13 15:19:36

标签: c# unity3d

1.我编写了一个脚本,使用ontriggerenter来查找一个炮弹在2D游戏中击中另一艘船的时间。

private void OnTriggerEnter(Collider other)
{


    if (other.tag != "cannonBallWASD" )
    {
        return;
    }

    Destroy(other.gameObject);
    Destroy(gameObject);
    Debug.Log(other);
}

2.使用WASD(ShipWASD)控制的船舶在使用箭头键(ShipArrows)控制的第2艘船上发射炮弹(cannonballWASD)。此代码位于附加到ShipArrows的脚本上。

3.我有一个单独的代码,它使用一个没有网格渲染器(边界)的立方体,它会破坏任何离开边界的炮弹,看起来它们正落入大海。这是一场双人游戏。

4.这就是问题所在 - 所以边界随船一起移动,它是ShipArrows的一个孩子。当我发射大炮时,炮弹击中边界而不是舰船对撞机。当我移除边界时,它会照到船上,但边界是我想要的。

5.边界和船都有并且需要它们是触发器碰撞器。有没有办法忽略此脚本中的边界,但不能在以下脚本中忽略它。

private void OnTriggerExit(Collider other)
{
    if(other.tag != "cannonBallWASD" && other.tag != "cannonBallArrows")
    {
        return;
    }
    Destroy(other.gameObject);
}

这个脚本使得ShipArrows cannonBalls看起来像是在他们离开ShipArrows Boundary时通过摧毁他们而在海中坠落。 (两艘船都这样做。)

1 个答案:

答案 0 :(得分:1)

要忽略碰撞,请使用Physics.IgnoreCollision

还有Physics.IgnoreLayerCollision用于忽略图层上的碰撞。

只需将要忽略的所有对象放在图层中,然后调用该函数来忽略它们上的图层。

忽略Collison 3D

Y

Physics.IgnoreCollision(yourFirstCollider, yourSecondCollider, true)

重置/识别Collison 2D

Physics.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, true);

Physics2D.IgnoreCollision(yourFirstCollider, yourSecondCollider, false);

两个图层不必相同。您可以忽略来自不同图层的对象的碰撞。这也可以通过编辑器无代码完成,方法是指定每个GameObject图层并转到编辑 - > 项目设置 - > 物理 - >或编辑 - > 项目设置 - > Physics 2D 然后配置哪些层应该从那里相互碰撞。