void LateUpdate() { // update all Position & render Vector3 offset = new Vector3(P5Setting.SCREEN_W / 2, P5Setting.SCREEN_H / 2, 0); Vector3 minSize = new Vector3(1, 1, 0) * PARTICLE_MINMUM_SIZE; for (int i = 0; i < maxParticles; i++) { UnityEngine.ParticleSystem.Particle particle = renderParticles[i]; P5Particle pObj = particles[i]; // processing float pSize = pObj.isStay ? PARTICLE_STAY_SIZE : PARTICLE_SIZE; // StretchedBillboardを使っているのでvelocityが0になると表示されなくなるのを回避 Vector3 t_velocity = new Vector3(pObj.vx, pObj.vy, 0); if (pObj.vMagnitude < MIN_MAGNITUDE) { t_velocity = minSize; } float z = -0.5f * pObj.vMagnitude; particle.position = new Vector3(pObj.x, pObj.y, z) - offset; //Stretched Billboardを使用しているときに上部MIN_MAGNITUDEの処理をするときに、 //レンダリング位置がずれるのを回避する為にスムージング処理。 //PARTICLE_MINMUM_SIZEを小さくする必要もある。 float smooth = pObj.isStay ? 0.0025f : 0.5f; particle.velocity += (t_velocity - particle.velocity) * smooth; //renderParticle.velocity = t_velocity; //renderParticle.velocity = pObj.renderV; particle.size = pSize * pObj.mass * UPSCALE_SIZE; Color color = pObj.color; color.a = pObj.alpha; particle.color = color; renderParticles[i] = particle; } // psys.SetParticles(renderParticles, maxParticles); }
public void Init(MSAFluidSolver2D fluidSolver) { allParticles = maxParticles + maxStayParticles; p5particles = new P5Particle[allParticles]; curIndex = 0; for (int i = 0; i < maxParticles; i++) { p5particles [i] = new P5Particle(); p5particles [i].fluidSolver = fluidSolver; p5particles [i].isSpark = true; } // stay particle for (int i = maxParticles; i < allParticles; i++) { p5particles [i] = new P5Particle(); p5particles [i].fluidSolver = fluidSolver; p5particles [i].isSpark = true; /* * p5particles[i].isStay = true; * float x = Random.Range(0, Setting.SCREEN_W); * float y = Random.Range(0, Setting.SCREEN_H); * Color color = stayColor; * //Color color = Color.cyan; * p5particles[i].init(x, y, color); * float t_alpha = Random.Range(0.4f, 0.9f); * //p5particles[i].mass = 0.4f; * p5particles[i].mass = Random.Range(0.4f, 0.9f); * p5particles[i].StartAppearAnime(t_alpha); */ } p5ParticleRenderer.Init(p5particles); }