2017-04-13 84 views
0

1.I已经编写了使用ontriggerenter找到当大炮球击中另一艘轮船在2D游戏的脚本。正在使用WASD(ShipWASD)控制如何忽略对象之间的碰撞

private void OnTriggerEnter(Collider other) 
{ 


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

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

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

3.我有一个单独的代码,它使用了一个没有网格渲染器(边界)的立方体,它可以销毁任何离开边界的炮弹,因此看起来像是掉入大海。这是一款2人游戏。

4.Here在位于problem-从而使边界与船舶四处移动它是ShipArrows的孩子。当我发射大炮时,炮弹击中边界而不是舰船对撞机。当我移除边界时,它会碰撞船只,但边界是我想要的。

5,边界和船舶都具有和需要的是触发对撞机上他们。有没有什么办法可以忽略这个脚本中的边界,但是不能在下面的脚本中忽略它。

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

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

+0

所以,当你打船它的边界的触发器被调用? – CNuts

+0

为什么你将Boundary附加到目标船上?如果你想沉没炮弹,那么一旦他们超出了射击舰的界限,他们就应该出海。射击船边界显然忽略了其他船的炮弹,反之亦然 –

+0

如果没有标签,做'如果一个标签',并把你想要的代码放在if中,而忽略其余部分。 IE'if(other.tag ==“theTagToDoCodeOn”){code}'好像对我来说事情正在滑过你的'if return' –

回答

1

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

还有Physics.IgnoreLayerCollision用于忽略层上的冲突。

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

忽略科里森3D

Physics.IgnoreCollision(yourFirstCollider, yourSecondCollider, true) 

Physics.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, true); 

复位/识别科里森2D

Physics2D.IgnoreCollision(yourFirstCollider, yourSecondCollider, false); 

Physics2D.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, false) 

两个层不必是同一的。您可以忽略来自不同图层的对象的碰撞。 >项目设置 - - >物理 - 这也可以通过编辑器而不通过代码分配每个游戏对象层和将要编辑完成>或编辑 - >项目设置 - >物理2D然后配置这些层应该与从那里彼此碰撞。