12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //
- // Rain Maker (c) 2016 Digital Ruby, LLC
- // http://www.digitalruby.com
- //
- using UnityEngine;
- using System.Collections.Generic;
- namespace DigitalRuby.RainMaker
- {
- public class RainCollision : MonoBehaviour
- {
- private static readonly Color32 color = new Color32(255, 255, 255, 255);
- private readonly List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>();
- public ParticleSystem RainExplosion;
- public ParticleSystem RainParticleSystem;
- private void Start()
- {
- }
- private void Update()
- {
- }
- private void Emit(ParticleSystem p, ref Vector3 pos)
- {
- int count = UnityEngine.Random.Range(2, 5);
- while (count != 0)
- {
- float yVelocity = UnityEngine.Random.Range(1.0f, 3.0f);
- float zVelocity = UnityEngine.Random.Range(-2.0f, 2.0f);
- float xVelocity = UnityEngine.Random.Range(-2.0f, 2.0f);
- const float lifetime = 0.75f;// UnityEngine.Random.Range(0.25f, 0.75f);
- float size = UnityEngine.Random.Range(0.05f, 0.1f);
- ParticleSystem.EmitParams param = new ParticleSystem.EmitParams();
- param.position = pos;
- param.velocity = new Vector3(xVelocity, yVelocity, zVelocity);
- param.startLifetime = lifetime;
- param.startSize = size;
- param.startColor = color;
- p.Emit(param, 1);
- count--;
- }
- }
- private void OnParticleCollision(GameObject obj)
- {
- if (RainExplosion != null && RainParticleSystem != null)
- {
- int count = RainParticleSystem.GetCollisionEvents(obj, collisionEvents);
- for (int i = 0; i < count; i++)
- {
- ParticleCollisionEvent evt = collisionEvents[i];
- Vector3 pos = evt.intersection;
- Emit(RainExplosion, ref pos);
- }
- }
- }
- }
- }
|