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

本文关键字:对撞机 之间 碰撞 粒子 Unity | 更新日期: 2023-09-27 17:54:18

我有任意数量的物体相互发射粒子系统。我想让粒子击中目标,而不是原点。是否有可能:

  • 在粒子系统和碰撞器之间使用IgnoreCollision

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

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

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

你应该检查你所碰撞的对象是否与你的原点对象相同所以通过检查器将你的原点游戏对象赋值给这个脚本的原点变量然后在碰撞检查中你所撞击的对象是否相同,如果不是那么你就没有撞击原点

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

我能给你的最好的建议是检查自我碰撞,并记录一个关于谁在做的警告。然后就是摆弄对撞机和粒子生成器的问题了,这样碰撞就不会发生了。

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

如果所有这些都失败了,你可以重新调整东西来使用粒子触发卷代替吗?作为变通办法,这可能是一个巨大的痛苦的屁股;你必须手动控制"可碰撞"的形状集

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

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

我相信你不能在粒子系统和碰撞器之间使用IgnoreCollision