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时通过摧毁他们而在海中坠落。 (两艘船都这样做。)
答案 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 然后配置哪些层应该从那里相互碰撞。