如何忽略对象之间的碰撞

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

private void OnTriggerEnter(Collider other) { if (other.tag != "cannonBallWASD" ) { return; } Destroy(other.gameObject); Destroy(gameObject); Debug.Log(other); } 

2.使用WASD(ShipWASD)控制的船舶在使用箭头键(ShipArrows)控制的第二艘船上发射炮弹(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时通过摧毁它们看起来像是在海中坠落。 (两艘船都这样做。)

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

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

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

忽略科里森3D

 Physics.IgnoreCollision(yourFirstCollider, yourSecondCollider, true) 

要么

 Physics.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, true); 

重置/识别Collison 2D

 Physics2D.IgnoreCollision(yourFirstCollider, yourSecondCollider, false); 

要么

 Physics2D.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, false) 

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