Change particles alpha / sharedMaterial

I have two different issues with particles and I have trouble in both of them.

First issue - dissolve a particle

I have a particle effect that is a gameobject group that consists of 4 different legacy particle systems (emitter+animator+renderer). I need to smoothly dissolve it using opacity.

First thing I do is I stop all emmitters. And that works ok.

for (var c: Component in fx.GetComponentsInChildren(ParticleEmitter)) {
    var pe: ParticleEmitter = c as ParticleEmitter;
    pe.emit = false;
}

But then I’m trying to affect the alpha of emitted particles and that’s where I fail:

for (var c: Component in fx.GetComponentsInChildren(ParticleEmitter)) {
    // I've tried trough particle emitter:
    var pe: ParticleEmitter = c as ParticleEmitter;
    var pr: Particle[ ] = pe.particles;
    for (var i: int = 0; i < pr.Length; i++) {
        pr[i].color.a = new_alpha;
    }

    // I've also tried through particle animator:
    var pa: ParticleAnimator = c as ParticleAnimator;
    for (var i: int = 0; i < pa.colorAnimation.Length; i++) {
        pa.colorAnimation[i].a = new_alpha;
    }
}

So, I need to change alpha of emitted legacy particles and don’t know how to do that.

Second issue - shared particle material

This is not connected to 1st issue. Here are different particles.

So, I have a bunch of particles that use the same material. And when I’m running my game in editor and use inspector to change that material’s color - it works fine and affects on all particles on the screen.

But I can’t to do that using code.

I’ve tried to get a shared material from one of my particles and to change it:

var material: Material =
    particle_go[0].GetComponentInChildren(ParticleSystem).renderer.sharedMaterial;
// material is not null here!
material.color = new_color;

How do I change the shared material just as I do when changing “color” property in inspector?

Any suggestions?

Am I the only one trying to affect emitted particles by code?

bump