Объявление
public void AddSubEmitter(ParticleSystem subEmitter, ParticleSystemSubEmitterType type, ParticleSystemSubEmitterProperties properties);public void AddSubEmitter(ParticleSystem subEmitter, ParticleSystemSubEmitterType type, ParticleSystemSubEmitterProperties properties, float emitProbability);
Параметры
subEmitter | Субэмиттер для добавления. |
type | Событие, создающее новые частицы. |
properties | Свойства новых частиц. |
emitProbability | Вероятность того, что субэмиттер излучает частицы. Принимает значения от 0 до 1, где 0 — никогда, а 1 — всегда. |
Описание
Добавить новый дополнительный эмиттер.
Смотрите так же: ParticleSystem.SubEmittersModule.RemoveSubEmitter.
using UnityEngine;
// Добавляем субэмиттер рождения
public class ExampleClass : MonoBehaviour
{
void Start()
{
// Простой материал частиц без текстуры.
Material particleMaterial = new Material(Shader.Find("Particles/Standard Surface"));
// Создаем зеленую частицусистему.
var rootSystemGO = new GameObject("ParticleSystem");
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;
// Разбросайте частицы побольше, чтобы эффект суб-эмиттера был более очевидным.
var shapeModule = rootParticleSystem.shape;
shapeModule.radius = 100;
// Создаем наш субэмиттер и настраиваем всплески.
var subSystemGO = new GameObject("ParticleSystem");
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)
});
// Настройте субчастицы так, чтобы они исчезали со временем.
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;
// Настраиваем субэмиттер.
subSystemGO.transform.SetParent(rootSystemGO.transform);
var subEmittersModule = rootParticleSystem.subEmitters;
subEmittersModule.enabled = true;
subEmittersModule.AddSubEmitter(subParticleSystem, ParticleSystemSubEmitterType.Birth, ParticleSystemSubEmitterProperties.InheritNothing);
}
}
using UnityEngine;
// Добавляем субэмиттер коллизий
public class ExampleClass : MonoBehaviour
{
void Start()
{
// Для этого примера нам понадобится что-то, с чем можно столкнуться в мире.
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position = new Vector3(0, 10, 0); // Position above the ParticleSystem.
cube.transform.localScale = new Vector3(10, 10, 10);
// Простой материал частиц без текстуры.
Material particleMaterial = new Material(Shader.Find("Particles/Standard Surface"));
// Create a green ParticleSystem.
var rootSystemGO = new GameObject("ParticleSystem");
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;
// Включить и настроить модуль коллизий.
var collisionModule = rootParticleSystem.collision;
collisionModule.enabled = true;
collisionModule.type = ParticleSystemCollisionType.World;
// Создаем наш саб-эмиттер и настраиваем всплески.
var subSystemGO = new GameObject("ParticleSystem");
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.
// Настроить субэмиттер.
subSystemGO.transform.SetParent(rootSystemGO.transform);
var subEmittersModule = rootParticleSystem.subEmitters;
subEmittersModule.enabled = true;
subEmittersModule.AddSubEmitter(subParticleSystem, ParticleSystemSubEmitterType.Collision, ParticleSystemSubEmitterProperties.InheritNothing);
}
}
using UnityEngine;
// Добавляем субэмиттер смерти
public class ExampleClass : MonoBehaviour
{
void Start()
{
// Простой материал частиц без текстуры.
Material particleMaterial = new Material(Shader.Find("Particles/Standard Surface"));
// Создайте зеленую частицусистему.
var rootSystemGO = new GameObject("ParticleSystem");
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;
// Создадим наш дополнительный эмиттер и настроим всплески.
var subSystemGO = new GameObject("ParticleSystem");
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.
// Настроить субэмиттер.
subSystemGO.transform.SetParent(rootSystemGO.transform);
var subEmittersModule = rootParticleSystem.subEmitters;
subEmittersModule.enabled = true;
subEmittersModule.AddSubEmitter(subParticleSystem, ParticleSystemSubEmitterType.Death, ParticleSystemSubEmitterProperties.InheritNothing);
}
}
using UnityEngine;
// Добавить ручной саб-эмиттер
public class ExampleClass : MonoBehaviour
{
private ParticleSystem ps;
private float m_Timer = 0.0f;
public float m_Interval = 2.0f;
void Start()
{
// Простой материал частиц без текстуры.
Material particleMaterial = new Material(Shader.Find("Particles/Standard Surface"));
// Создайте зеленую частицусистему.
var rootSystemGO = new GameObject("ParticleSystem");
rootSystemGO.transform.Rotate(-90, 0, 0); // Rotate so the system emits upwards.
ps = rootSystemGO.AddComponent<ParticleSystem>();
rootSystemGO.GetComponent<ParticleSystemRenderer>().material = particleMaterial;
var mainModule = ps.main;
mainModule.startColor = Color.green;
mainModule.startSize = 0.5f;
// Создаем наш саб-эмиттер и настраиваем всплески.
var subSystemGO = new GameObject("ParticleSystem");
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, 4) }); // We will emit 10 particles when triggered.
// Настраиваем субэмиттер.
subSystemGO.transform.SetParent(rootSystemGO.transform);
var subEmittersModule = ps.subEmitters;
subEmittersModule.enabled = true;
subEmittersModule.AddSubEmitter(subParticleSystem, ParticleSystemSubEmitterType.Manual, ParticleSystemSubEmitterProperties.InheritNothing);
}
private void Update()
{
m_Timer += Time.deltaTime;
while (m_Timer >= m_Interval)
{
ps.TriggerSubEmitter(0);
m_Timer -= m_Interval;
}
}
}