Unity忽略同一层

时间:2016-08-12 12:20:54

标签: unity3d

我想使用Physics.IgnoreCollision来避免子弹击中自己。 子弹在第8层产生。为什么这不起作用?如何忽略同一层上所有事物的碰撞?

// bulletscript.cs
gameObject.layer = 8;

// maingamescript.cs
Physics.IgnoreCollision(8,8);

第8层上可能还有其他对象也应该被忽略。 (例如,玩家船)。

3 个答案:

答案 0 :(得分:7)

为什么不使用方便的花花公子物理经理。转到编辑 - >项目设置 - >物理并设置适当的层碰撞。 enter image description here

答案 1 :(得分:1)

转到Physics Manager并取消检查图层以避免碰撞。

enter image description here

答案 2 :(得分:1)

<强> Troubleshot:

  1. Unity bug,尝试更新到最新的Unity 5.3.x(5.4目前有令人讨厌的错误)
  2. 确保子弹和玩家有效地进入所需图层
  3. 层中的变化需要一些时间才能生效(少数帧),因为子弹很快,你可能会遇到这种滞后(所以当变化生效时子弹已经击中了目标)
  4. 最好的方法是让一个Bullet Prefab已经在正确的图层中生成,如果你愿意,你可以稍后在运行时通过changin图形进行自定义,但为了避免滞后,它应该已经在正确的图层中实例化了。
  5. 没有必要去物理经理,OP已经做了相当于物理经理的正确代码。真正的问题是游戏对象应该已经使用正确的图层进行实例化,因为图层更新可能需要一些时间才能生效。

    另一种解决方法是禁用/重新启用对撞机。