this is an example from Unity3D :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParticleLauncher : MonoBehaviour {
public ParticleSystem particleLauncher;
public ParticleSystem splatterParticles;
public Gradient particleColorGradient;
public ParticleDecalPool splatDecalPool;
List<ParticleCollisionEvent> collisionEvents;
void Start ()
{
collisionEvents = new List<ParticleCollisionEvent> ();
}
void OnParticleCollision(GameObject other)
{
ParticlePhysicsExtensions.GetCollisionEvents (particleLauncher, other, collisionEvents);
for (int i = 0; i < collisionEvents.Count; i++)
{
splatDecalPool.ParticleHit (collisionEvents [i], particleColorGradient);
EmitAtLocation (collisionEvents[i]);
}
}
void EmitAtLocation(ParticleCollisionEvent particleCollisionEvent)
{
splatterParticles.transform.position = particleCollisionEvent.intersection;
splatterParticles.transform.rotation = Quaternion.LookRotation (particleCollisionEvent.normal);
ParticleSystem.MainModule psMain = splatterParticles.main;
psMain.startColor = particleColorGradient.Evaluate (Random.Range (0f, 1f));
splatterParticles.Emit (1);
}
void Update ()
{
if (Input.GetButton ("Fire1"))
{
ParticleSystem.MainModule psMain = particleLauncher.main;
psMain.startColor = particleColorGradient.Evaluate (Random.Range (0f, 1f));
particleLauncher.Emit (1);
}
}
}
you can find the rest of the code in here :
My question is about EmitAtLocation() function , Inside this function we have
ParticleSystem.MainModule psMain = splatterParticles.main;
MainModule is a struct and I know that the struct in C# passed by value not by reference , but here we have psMain variable , if we do any change to that variable the splatterParticles.main will be effected , its looks like the struct has been passed by reference , is that Possiable in C# or am I missing something ?