Пример #1
0
    void calculateCohesion(JoanBoidsAgent a)
    {
        Vector3 centralPosition = new Vector3();

        foreach (JoanBoidsAgent neightbour in a.neightbours)
        {
            if (!neightbour)
            {
                return;
            }
            centralPosition += neightbour.transform.position;
        }
        centralPosition += a.transform.position;
        centralPosition /= a.neightbours.Count + 1;
        a.addForce((centralPosition - a.transform.position) * cohesionWeight, JoanBoidsAgent.DEBUGforceType.COHESION);
    }
Пример #2
0
    void calculateAlignment(JoanBoidsAgent a)
    {
        Vector3 dirVec = new Vector3();

        foreach (JoanBoidsAgent neightbour in a.neightbours)
        {
            if (!neightbour)
            {
                return;
            }
            dirVec += neightbour.velocity;
        }

        dirVec += a.velocity;
        dirVec /= a.neightbours.Count + 1;
        a.addForce(dirVec, JoanBoidsAgent.DEBUGforceType.ALIGNMENT);
    }
Пример #3
0
    void calculateSeparation(JoanBoidsAgent a)
    {
        Vector3 separationVector = Vector3.zero;

        foreach (JoanBoidsAgent neightbour in a.neightbours)
        {
            if (!neightbour)
            {
                return;
            }
            float distance = Vector3.Distance(a.transform.position, neightbour.transform.position);
            distance         /= a.radius;
            distance          = 1 - distance;
            separationVector += distance * (a.transform.position - neightbour.transform.position).normalized * separationWeight;
        }
        a.addForce(separationVector, JoanBoidsAgent.DEBUGforceType.SEPARATION);
    }