Unity2D 粒子系统 - 随机化图层或 Z 变换值以作为其他游戏对象出现在 front/behind/same 图层中

Unity2D Particle System - Randomising Layer or Z transform value for appearing in front/behind/same layer as other game objects

我目前正在为 2D Unity 游戏项目开发我的天气系统。我想要完成的是随机化粒子将在哪一层生成,这样有时它会出现在其他精灵(例如玩家或建筑物)后面,有时会出现在前面,有时会与它们发生碰撞(在同一层)。

总的来说,我对粒子系统比较陌生,但经过多次尝试,我已经实现了除此之外的目标。

我基本上希望能够随机化每个粒子,使其具有例如 -1、0 或 1 的 Z 值,player/other 对象可能处于 0,粒子将在此处发生碰撞跟他们。想象一下,这是我目前的行为,当我想要大约 1/3 时,每个粒子都会与对象发生碰撞: https://i.imgur.com/vplFcye.gifv

也许我不应该使用 Z 位置值,而应该更多地考虑图层?随机化粒子产生的层,因此它们可以与之交互,但无论哪种方式,我都找不到一种方法来编写脚本或在检查器中设置更改此 layer/z 值的能力。

我考虑过使用三个粒子系统,我相信这可以实现我的目标,但并不理想,而且可能会损害我假设的性能?

如果有人有任何见解,也许我什至在检查员中错过了一个非常明显的 variable/setting。

谢谢。

也许这不是最优雅的解决方案,但您可以将 Emission 形状设置为 Mesh,Type 为 Edge,并使用由 3 个独立矩形组成的自定义网格,每个矩形用于 front/back/middle 层。我对此进行了测试,它似乎运行良好:

我遇到的唯一问题是我最初尝试使用只有 3 个边的模型进行此操作,但发现 Unity 导入器去除了未附加到面的边,因此我不得不将它们设为三个接近零的边-取而代之的是我的网格中的宽度面。