【发布时间】:2017-04-13 15:19:36
【问题描述】:
1.我编写了一个脚本,在 2D 游戏中使用 ontriggerenter 来查找炮弹击中另一艘船的时间。
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.我有一段单独的代码,它使用一个没有网格渲染器的立方体(边界),它破坏了任何离开边界的炮弹,所以看起来它们正在落入大海。这是一款 2 人游戏。
4.问题就在这里——边界随船四处移动,它是 ShipArrows 的孩子。当我发射大炮时,炮弹击中边界而不是船只对撞机。当我移除边界时,它应该会撞到船,但边界是我想要的。
5.边界和船都有并且需要在它们上面触发碰撞器。有什么办法可以忽略此脚本中的边界,但不忽略以下脚本中的边界。
private void OnTriggerExit(Collider other)
{
if(other.tag != "cannonBallWASD" && other.tag != "cannonBallArrows")
{
return;
}
Destroy(other.gameObject);
}
此脚本通过在离开 ShipArrows 边界时将其摧毁,使 ShipArrows cannonBalls 看起来像是坠入海中。 (两艘船都这样做。)
【问题讨论】:
-
所以当你击中飞船时,触发边界的触发器会被调用?
-
为什么你的目标船有边界?如果你想击沉炮弹,一旦它们离开射击船的边界就应该去海里。射击船边界显然会忽略其他船的炮弹,反之亦然
-
而不是做
if not a tag做if a tag并将你想要的代码放在 if 中并忽略其余部分。 IEif(other.tag == "theTagToDoCodeOn"){ the code }在我看来,事情正在从你的if return溜过去