|
|
- using UnityEngine;
- using System.Collections;
-
- public class SparkParticles : MonoBehaviour
- {
- public Transform BillboardTarget;
- ParticleSystem _particleSystem;
- // There is a fixed buffer size for particles hacked into this script.
- // This means the script will cap the max number of particles to whatever the length of this array is.
- // It's ugly I know. Sorry!
- ParticleSystem.Particle[] _particles = new ParticleSystem.Particle[25];
-
- void Awake()
- {
- _particleSystem = GetComponent<ParticleSystem>();
-
- if (BillboardTarget == null)
- BillboardTarget = Camera.main.transform;
- }
-
- void FixParticleRotations()
- {
- int count = _particleSystem.GetParticles(_particles);
-
- for (int i = 0; i < count; i++)
- {
- Vector3 dir = _particles[i].velocity.normalized;
- float rot = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
- _particles[i].rotation = rot;
- }
-
- _particleSystem.SetParticles(_particles, _particleSystem.particleCount);
- }
-
- public void Play()
- {
- transform.LookAt(BillboardTarget);
- _particleSystem.Play();
- StartCoroutine(LateFix());
- }
-
- // It seems setting the rotations on the frame you tell the system to Play is insufficient.
- // So this handy coroutine delays that by a single frame.
- IEnumerator LateFix()
- {
- yield return null;
- FixParticleRotations();
- }
- }
|