public void Init(Particle2DData setting) { this.lifeTime = setting.lifeTime; transform.position = setting.position; pBody.velocity = setting.velocity; pBody.gravityScale = setting.gravityScale; pBody.fixedAngle = true; if (setting.collide) { pColl.enabled = true; pColl.size = setting.sprite.bounds.size; pColl.sharedMaterial = setting.collidingMaterial; } else { pColl.enabled = false; } pRenderer.sprite = setting.sprite; pRenderer.material = setting.material; pRenderer.color = setting.color; transform.localScale = setting.scale; Invoke("Disable", lifeTime); }
public static void integrate(ref Particle2DData particle, float dt) { Vector2 vel = particle.velocity * (float)dt; particle.position += new Vector2(vel.x, vel.y); Vector2 resultingAcc = particle.acceleration; //only accumulate forces if ignoreForces is false if (!particle.ignoreForces) //accumulate forces here { resultingAcc += particle.accumulatedForces * particle.mass; } particle.velocity += (resultingAcc * (float)dt); float damping = Mathf.Pow(particle.dampingConstant, (float)dt); particle.velocity *= damping; particle.accumulatedForces = Vector2.zero; }
Particle2DData MakeRandomParticle() { Particle2DData p = new Particle2DData(); p.lifeTime = m_pSystemData.lifeTime; float randomX = Random.value - 0.5f; float randomY = Random.value - 0.5f; Vector3 randomDirection = new Vector3(randomX, randomY, 0); if (m_pSystemData.bounds.size.x == 0) { p.position = transform.position; } else { p.position = transform.position + (Vector3)FindBorder(randomX, randomY); } if (LayerUtil.IsLayerExists(p.position, ParticleManager.Inst.particleCollidingLayer)) return null; /* RaycastHit2D[] hits = Physics2D.RaycastAll(transform.position, randomDirection, 1.2f, collidingMask); if (hits.Length > 1) { return null; } */ p.velocity = (randomDirection * Random.Range(m_pSystemData.minVelocity, m_pSystemData.maxVelocity)) + (Vector3)(m_pSystemData.gravityModifier); p.gravityScale = m_pSystemData.gravityScale; p.collide = m_pSystemData.collide; p.sprite = m_pSystemData.sprite; p.collidingMaterial = m_pSystemData.collidingMaterial; p.material = m_pSystemData.material; p.color = m_pSystemData.colors[(int)(Random.value * m_pSystemData.colors.Length)]; p.scale = Vector3.one * (m_pSystemData.size / m_pSystemData.sprite.bounds.size.x); return p; }