Exemple #1
0
    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);
    }
Exemple #2
0
    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;
        }