public override object WriteTo(object obj) { obj = base.WriteTo(obj); if (obj == null) { return(null); } ParticleSystem.TriggerModule o = (ParticleSystem.TriggerModule)obj; if (m_colliders == null) { for (int i = 0; i < o.maxColliderCount; ++i) { o.SetCollider(i, null); } } else { for (int i = 0; i < Mathf.Min(o.maxColliderCount, m_colliders.Length); ++i) { o.SetCollider(i, FromID <Component>(m_colliders[i])); } } return(obj); }
public void Activate(float delay, Vector3 position, float flyTime) { StartCoroutine(ActivateMagnet()); IEnumerator ActivateMagnet() //Use coroutine to enable and disable the magnet easily with yields { //Prepare particle system to be attracted by the magnet if it isn't already or is configured improperly if (!_triggerModule.enabled || _triggerModule.inside != ParticleSystemOverlapAction.Callback) { GameObject clone = new GameObject(); clone.AddComponent <BoxCollider2D>().size = new Vector2(500, 500); clone.transform.parent = transform; _triggerModule.enabled = true; _triggerModule.inside = ParticleSystemOverlapAction.Callback; _triggerModule.SetCollider(0, clone.GetComponent <BoxCollider2D>()); } yield return(new WaitForSeconds(delay)); _targetPosition = position; //Assign position to variable. Then gets referenced in OnParticletrigger _magnetActivated = true; yield return(new WaitForSeconds(flyTime)); _magnetActivated = false; } }
void Start() { ps = GetComponent <ParticleSystem>(); collisionEvents = new List <ParticleCollisionEvent>(); ParticleSystem.TriggerModule trigger = ps.trigger; player = GameObject.FindWithTag("Player").GetComponent <Player>(); trigger.SetCollider(0, player.gameObject.GetComponent <Collider>()); }
void OnEnable() { _ps_system = GetComponent <ParticleSystem>(); _ps_trigger = _ps_system.trigger; //_ps_particles = new ParticleSystem.Particle[_ps_system.maxParticles];// Before Unity 5.5 _ps_particles = new ParticleSystem.Particle[_ps_system.main.maxParticles]; // Since Unity 5.5 for (int i = 0; i < target.Length; i++) { _ps_trigger.SetCollider(i, target[i].GetComponent <Collider>()); } }
public override IEnumerator WiatForStart() { for (int i = 0; i < pS.Length; i++) { ParticleSystem.TriggerModule psTrigger = pS[i].trigger; psTrigger.SetCollider(0, rb.gameObject.GetComponent <CircleCollider2D>()); } yield return(new WaitForSeconds(1f)); rb.bodyType = RigidbodyType2D.Dynamic; rb.gravityScale = 0.5f; }
public void Splash() { ParticleSystem ps = Instantiate(splashParticles); ps.transform.position = player.transform.position; // Set particle velocity according to velocity ParticleSystem.MainModule newMain = ps.main; float speed = Mathf.Abs(player.rb.velocity.y / 2f); newMain.startSpeed = new ParticleSystem.MinMaxCurve(speed * 0.8f * 1.5f, speed * 1.2f * 1.5f + 1); // Set particle quantity according to velocity ParticleSystem.EmissionModule newEmission = ps.emission; newEmission.rateOverTimeMultiplier = Mathf.Pow(player.rb.velocity.y, 2) / (900f) * 300f + 50; ParticleSystem.TriggerModule newTrigger = ps.trigger; newTrigger.SetCollider(0, splashZone._collider); ps.Play(); }
private void Start() { ParticleSystem.TriggerModule t = GetComponentInChildren <ParticleSystem>().trigger; GameObject[] g = GameObject.FindGameObjectsWithTag("WaterTarget"); SphereCollider[] colliders = new SphereCollider[g.Length]; int i = 0; foreach (GameObject a in g) { colliders[i] = a.GetComponent <SphereCollider>(); i++; } i = 0; foreach (SphereCollider a in colliders) { t.SetCollider(i, a); i++; } secondFinger = GameObject.FindGameObjectWithTag("IndexBoneR2"); }
void LateUpdate() { if (target[0] == null) { return; } //If you are not changing target during runtime, skip this: for (int i = 0; i < target.Length; i++) { _ps_trigger.SetCollider(i, target[i].GetComponent <Collider>()); } _ps_particles = new ParticleSystem.Particle[_ps_system.main.maxParticles]; int numParticlesAlive = _ps_system.GetParticles(_ps_particles); for (int i = 0; i < numParticlesAlive; i++) { float[] dist = new float[target.Length]; switch (targetSelection) { case TSOP.random: index = Mathf.Abs((int)_ps_particles[i].randomSeed) % target.Length; break; case TSOP.closest: for (int j = 0; j < target.Length; j++) { dist[j] = Vector3.Distance(_ps_particles[i].position, target[j].position); } //index = System.Array.IndexOf(dist, dist.Min());// slower than comparing in foreach. float minValue = float.MaxValue; int minindex = -1; index = -1; foreach (float num in dist) { minindex++; if (num <= minValue) { minValue = num; index = minindex; } } break; } //Debug.Log(index); float ted = (target[index].position - this.transform.position).sqrMagnitude + 0.001f; Vector3 diff = target[index].position - _ps_particles[i].position; float diffsqrm = diff.sqrMagnitude; float face = Vector3.Dot(_ps_particles[i].velocity.normalized, diff.normalized); float f = Mathf.Abs((ted - diffsqrm) / ted) * ted * (face + 1.001f); //_ps_particles[i].velocity = Vector3.ClampMagnitude(_ps_particles[i].velocity + diff * speed * 0.01f * f, maxSpeed); float t = 0; t += Time.deltaTime / (homingDelay * 0.01f + 0.0001f); _ps_particles[i].velocity = Vector3.ClampMagnitude(Vector3.Slerp(_ps_particles[i].velocity, _ps_particles[i].velocity + diff * speed * 0.01f * f, t), maxSpeed); /* * if (Vector3.Distance(_ps_particles[i].position, target[index].position) < dyingRange) { * //_ps_particles[i].lifetime = 0f;// Before Unity 5.5 * _ps_particles[i].remainingLifetime = 0f;// Since Unity 5.5 * } */ } _ps_system.SetParticles(_ps_particles, numParticlesAlive); }