subEmitter | 要添加的子发射器。 |
type | 创建新粒子的事件。 |
properties | 新粒子的属性。 |
添加新的子发射器。
using UnityEngine;
// Add a birth sub-emitter
public class ExampleClass : MonoBehaviour
{
void Start()
{
// A simple particle material with no texture.
Material particleMaterial = new Material(Shader.Find("Particles/Alpha Blended Premultiply"));
// Create a green particle system.
var rootSystemGO = new GameObject("Particle System");
rootSystemGO.transform.Rotate(-90, 0, 0); // Rotate so the system emits upwards.
var rootParticleSystem = rootSystemGO.AddComponent<ParticleSystem>();
rootSystemGO.GetComponent<ParticleSystemRenderer>().material = particleMaterial;
var mainModule = rootParticleSystem.main;
mainModule.startColor = Color.green;
mainModule.startSize = 0.5f;
// Spread the particles out more so the sub-emitter effect is more obvious.
var shapeModule = rootParticleSystem.shape;
shapeModule.radius = 100;
// Create our sub-emitter and set up bursts.
var subSystemGO = new GameObject("Particle System");
var subParticleSystem = subSystemGO.AddComponent<ParticleSystem>();
subSystemGO.GetComponent<ParticleSystemRenderer>().material = particleMaterial;
var subMainModule = subParticleSystem.main;
subMainModule.startColor = Color.red;
subMainModule.startSize = 0.25f;
subMainModule.startLifetime = 0.5f; // very short life particles.
var emissionModule = subParticleSystem.emission;
emissionModule.rate = 2; // 1 particle will emit every 0.5 sec.
emissionModule.SetBursts(new ParticleSystem.Burst[] // A burst will emit at 1 and 3 secs.
{
new ParticleSystem.Burst(1.0f, 10),
new ParticleSystem.Burst(3.0f, 10)
});
// Set up the sub particles so they fade over time.
var colorModule = subParticleSystem.colorOverLifetime;
colorModule.enabled = true;
var gradient = new Gradient();
gradient.SetKeys(
new GradientColorKey[] { new GradientColorKey(Color.white, 0.0f), new GradientColorKey(Color.white, 1.0f) }, // Color remains untouched.
new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(0.0f, 1.0f) }); // Alpha fades
colorModule.color = gradient;
// Setup the sub-emitter.
subSystemGO.transform.SetParent(rootSystemGO.transform);
var subEmittersModule = rootParticleSystem.subEmitters;
subEmittersModule.enabled = true;
subEmittersModule.AddSubEmitter(subParticleSystem, ParticleSystemSubEmitterType.Birth, ParticleSystemSubEmitterProperties.InheritNothing);
}
}
using UnityEngine;
// Add a collision sub-emitter
public class ExampleClass : MonoBehaviour
{
void Start()
{
// For this example we will need something to collide with in the world.
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position = new Vector3(0, 10, 0); // Position above the particle system.
cube.transform.localScale = new Vector3(10, 10, 10);
// A simple particle material with no texture.
Material particleMaterial = new Material(Shader.Find("Particles/Alpha Blended Premultiply"));
// Create a green particle system.
var rootSystemGO = new GameObject("Particle System");
rootSystemGO.transform.Rotate(-90, 0, 0); // Rotate so the system emits upwards.
var rootParticleSystem = rootSystemGO.AddComponent<ParticleSystem>();
rootSystemGO.GetComponent<ParticleSystemRenderer>().material = particleMaterial;
var mainModule = rootParticleSystem.main;
mainModule.startColor = Color.green;
mainModule.startSize = 0.5f;
// Enable and setup the collisions module.
var collisionModule = rootParticleSystem.collision;
collisionModule.enabled = true;
collisionModule.type = ParticleSystemCollisionType.World;
// Create our sub-emitter and setup bursts.
var subSystemGO = new GameObject("Particle System");
var subParticleSystem = subSystemGO.AddComponent<ParticleSystem>();
subSystemGO.GetComponent<ParticleSystemRenderer>().material = particleMaterial;
var subMainModule = subParticleSystem.main;
subMainModule.startColor = Color.red;
subMainModule.startSize = 0.25f;
var emissionModule = subParticleSystem.emission;
emissionModule.SetBursts(new ParticleSystem.Burst[] { new ParticleSystem.Burst(0.0f, 10) }); // We will emit 10 particles upon collision.
// Set up the sub-emitter.
subSystemGO.transform.SetParent(rootSystemGO.transform);
var subEmittersModule = rootParticleSystem.subEmitters;
subEmittersModule.enabled = true;
subEmittersModule.AddSubEmitter(subParticleSystem, ParticleSystemSubEmitterType.Collision, ParticleSystemSubEmitterProperties.InheritNothing);
}
}
using UnityEngine;
// Add a death sub-emitter
public class ExampleClass : MonoBehaviour
{
void Start()
{
// A simple particle material with no texture.
Material particleMaterial = new Material(Shader.Find("Particles/Alpha Blended Premultiply"));
// Create a green particle system.
var rootSystemGO = new GameObject("Particle System");
rootSystemGO.transform.Rotate(-90, 0, 0); // Rotate so the system emits upwards.
var rootParticleSystem = rootSystemGO.AddComponent<ParticleSystem>();
rootSystemGO.GetComponent<ParticleSystemRenderer>().material = particleMaterial;
var mainModule = rootParticleSystem.main;
mainModule.startColor = Color.green;
mainModule.startSize = 0.5f;
// Create our sub-emitter and setup bursts.
var subSystemGO = new GameObject("Particle System");
var subParticleSystem = subSystemGO.AddComponent<ParticleSystem>();
subSystemGO.GetComponent<ParticleSystemRenderer>().material = particleMaterial;
var subMainModule = subParticleSystem.main;
subMainModule.startColor = Color.red;
subMainModule.startSize = 0.25f;
var emissionModule = subParticleSystem.emission;
emissionModule.SetBursts(new ParticleSystem.Burst[] { new ParticleSystem.Burst(0.0f, 10) }); // We will emit 10 particles upon death.
// Set up the sub-emitter.
subSystemGO.transform.SetParent(rootSystemGO.transform);
var subEmittersModule = rootParticleSystem.subEmitters;
subEmittersModule.enabled = true;
subEmittersModule.AddSubEmitter(subParticleSystem, ParticleSystemSubEmitterType.Death, ParticleSystemSubEmitterProperties.InheritNothing);
}
}