Пример #1
0
    public void InitializeParticleVelocities()
    {
        foreach (Particle particle in particles)
        {
            Rigidbody rb = particle.gameObject.GetComponent <Rigidbody>();

            float randX;
            float randY;
            float randZ;
            SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ);

            rb.AddForce(new Vector3(randX, randY, randZ).normalized *particleSpeed);
        }

        foreach (Particle optima in optimaList)
        {
            Rigidbody rb = optima.gameObject.GetComponent <Rigidbody>();

            float randX;
            float randY;
            float randZ;
            SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ);

            rb.AddForce(new Vector3(randX, randY, randZ).normalized *optimaSpeed);
        }
    }
Пример #2
0
    private void InitializeParticleObjects()
    {
        for (int i = 0; i < numParticles; i++)
        {
            float randX, randY, randZ;

            SwarmUtil.GetRandomXYZWithPositiveY(out randX, out randY, out randZ);

            Vector3 position = new Vector3(randX, randY, randZ);

            GameObject goInstance = (GameObject)Instantiate(particleTemplate, position, transform.rotation);

            Particle temp = new Particle(goInstance);
            temp.bestPosition = goInstance.GetComponent <Rigidbody>().position;

            swarmBrain.particles.Add(temp);
        }
    }
Пример #3
0
    public void UpdateParticleVelocities()
    {
        entropyPercentage = Mathf.Clamp(entropyPercentage, 0, 1);

        foreach (Particle particle in particles)
        {
            Rigidbody rb = particle.gameObject.GetComponent <Rigidbody>();

            float randXp, randXg;
            float randYp, randYg;
            float randZp, randZg;
            SwarmUtil.GetRandomUnitSphereXYZ(out randXp, out randYp, out randZp, entropyPercentage);
            SwarmUtil.GetRandomUnitSphereXYZ(out randXg, out randYg, out randZg, entropyPercentage);

            float XpMotive = randXp * (particle.bestPosition.x - rb.position.x);
            float XgMotive = randXg * (globalBestPosition.x - rb.position.x);

            float YpMotive = randYp * (particle.bestPosition.y - rb.position.y);
            float YgMotive = randYg * (globalBestPosition.y - rb.position.y);

            float ZpMotive = randZp * (particle.bestPosition.z - rb.position.z);
            float ZgMotive = randZg * (globalBestPosition.z - rb.position.z);

            float X = personalBestInfluence * XpMotive + globalBestInfluence * XgMotive;
            float Y = personalBestInfluence * YpMotive + globalBestInfluence * YgMotive;
            float Z = personalBestInfluence * ZpMotive + globalBestInfluence * ZgMotive;

            //Vector3 influence = new Vector3(X * particleSpeed, Y * particleSpeed, Z * particleSpeed);
            rb.AddForce(new Vector3(X, Y, Z).normalized *particleSpeed);
        }

        foreach (Particle optima in optimaList)
        {
            Rigidbody rb = optima.gameObject.GetComponent <Rigidbody>();

            float randX;
            float randY;
            float randZ;
            SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ);

            rb.AddForce(new Vector3(randX, randY, randZ).normalized *optimaSpeed);
        }
    }
Пример #4
0
    private void InitializeOptimaObjects()
    {
        for (int i = 0; i < numOptima; i++)
        {
            float randX, randY, randZ;

            SwarmUtil.GetRandomXYZWithPositiveY(out randX, out randY, out randZ);

            Vector3 position = new Vector3(randX, randY, randZ);

            GameObject goInstance = (GameObject)Instantiate(optimaTemplate, position, transform.rotation);

            Particle temp = new Particle(goInstance);


            GameObject pointLight = (GameObject)Instantiate(OptimaLightTemplate, position, transform.rotation);
            pointLight.transform.parent = temp.gameObject.transform;


            swarmBrain.optimaList.Add(temp);
        }
    }