Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
    }