I have encountered an issue and honestly, it should not be the way it is.
Recently, I switched my projectiles collision to OnParticleCollision() scripts, instead of a manual sphere collider with OnTriggerEnter(). It was a good deal, because I would get to apply the effects I wanted and at the same time allow the collision visual to take place automatically, via the subemitters feature.
However, there were two issues - terrain collision could not be detected and the FPS would drop a lot when multiple instances of projectiles were present in the scene.
Thus, I switched back to the traditional sphere collider. I am now facing another issue, however. I am trying to make the Projectile script as modular and flexible as possible. Thus, instead of creating a separate gameObject for the collision visuals, I would still add it as a subemitter and, since I do no longer want the collision to occur, I would call it manually by GetComponent().subEmitters.collision0.Play(). Point is, forcefully playing it or emitting (.Emit()) does not work. It is as if it is being suppressed by the main emitter once the former becomes a subemitter. If it was not destined to be accessed in such a way, it should not have the Play() or any ParticleSystem-derived behaviour exposed when accessing it (collision0.methodName).
The reason I am still using the subEmitter field of Collision instead of Birth and Death is that those are automatically emitted on each of the events respectively. Collision, however, is internally controlled. Was I too naive to think that I could somehow “override” this internal emission control by playing the subEmitter manually?
I am considering submitting it as an issue to be fixed. What are your thoughts?