RainCollision.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //
  2. // Rain Maker (c) 2016 Digital Ruby, LLC
  3. // http://www.digitalruby.com
  4. //
  5. using UnityEngine;
  6. using System.Collections.Generic;
  7. namespace DigitalRuby.RainMaker
  8. {
  9. public class RainCollision : MonoBehaviour
  10. {
  11. private static readonly Color32 color = new Color32(255, 255, 255, 255);
  12. private readonly List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>();
  13. public ParticleSystem RainExplosion;
  14. public ParticleSystem RainParticleSystem;
  15. private void Start()
  16. {
  17. }
  18. private void Update()
  19. {
  20. }
  21. private void Emit(ParticleSystem p, ref Vector3 pos)
  22. {
  23. int count = UnityEngine.Random.Range(2, 5);
  24. while (count != 0)
  25. {
  26. float yVelocity = UnityEngine.Random.Range(1.0f, 3.0f);
  27. float zVelocity = UnityEngine.Random.Range(-2.0f, 2.0f);
  28. float xVelocity = UnityEngine.Random.Range(-2.0f, 2.0f);
  29. const float lifetime = 0.75f;// UnityEngine.Random.Range(0.25f, 0.75f);
  30. float size = UnityEngine.Random.Range(0.05f, 0.1f);
  31. ParticleSystem.EmitParams param = new ParticleSystem.EmitParams();
  32. param.position = pos;
  33. param.velocity = new Vector3(xVelocity, yVelocity, zVelocity);
  34. param.startLifetime = lifetime;
  35. param.startSize = size;
  36. param.startColor = color;
  37. p.Emit(param, 1);
  38. count--;
  39. }
  40. }
  41. private void OnParticleCollision(GameObject obj)
  42. {
  43. if (RainExplosion != null && RainParticleSystem != null)
  44. {
  45. int count = RainParticleSystem.GetCollisionEvents(obj, collisionEvents);
  46. for (int i = 0; i < count; i++)
  47. {
  48. ParticleCollisionEvent evt = collisionEvents[i];
  49. Vector3 pos = evt.intersection;
  50. Emit(RainExplosion, ref pos);
  51. }
  52. }
  53. }
  54. }
  55. }