<分区>
这是来自 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);
}
}
}
您可以在此处找到其余代码:
我的问题是关于 EmitAtLocation() 函数,在这个函数中我们有
ParticleSystem.MainModule psMain = splatterParticles.main;
MainModule 是一个结构,我知道 C# 中的结构是通过值而不是通过引用传递的,但是这里我们有 psMain 变量,如果我们对该变量做任何更改,splatterParticles.main 将受到影响,它看起来像结构已通过引用传递,在 C# 中是可能的还是我遗漏了什么?