避免Unity中粒子和对撞机之间的碰撞

时间:2015-06-06 20:03:47

标签: c# unity3d

我有一个任意大量的事物互相射击粒子系统。我希望粒子击中目标而不是原始对象。是否有可能:

  • 在ParticleSystem和Collider之间使用IgnoreCollision

  • 在运行时定义新的碰撞图层

或者是否有一些偷偷摸摸的解决这个问题的方法我没有考虑过?

3 个答案:

答案 0 :(得分:0)

您应该检查您要碰撞的对象是否与原始对象相同,因此请通过检查器将原始游戏对象分配给此脚本的原始变量,然后在碰撞检查中检查您击中的对象是否相同,如果不是那么你没有击中原点

  Public GameObject origin;
 void OnParticleCollision(GameObject other) {          
     if(other.GetInstanceID() != origin.GetInstanceID())
         DoSomething();
              }

答案 1 :(得分:0)

我能给您的最佳建议是检查自我冲突并记录有关谁在做的警告。然后是摆弄碰撞器和粒子生成器的问题,这样就不会发生碰撞。

不幸的是,似乎没有任何代码方面的方法可以告诉粒子系统碰撞模块忽略某些对撞机。

如果其他所有方法都失败了,那么您可以重新设置粒子触发器卷的工作范围吗?随着变通办法的进行,这可能是一个巨大的麻烦。您将不得不手动控制“可识别”形状集。

答案 2 :(得分:0)

如果要在运行时设置碰撞模块的碰撞的值,则需要定义Layermask并使用以下代码:

var particleCollision = yourParticleSystemComponent.collision;
particleCollision.collidesWith = layermask;

我相信您不能在粒子系统和对撞机之间使用IgnoreCollision