示例#1
0
    void calculateCohesion(AgentPau a)
    {
        Vector3 centralPosition = new Vector3();

        foreach (AgentPau neightbour in a.neightbours)
        {
            centralPosition += neightbour.transform.position;
        }
        centralPosition += a.transform.position;
        centralPosition /= a.neightbours.Count + 1;
        a.addForce((centralPosition - a.transform.position) * cohesionWeight, AgentPau.DEBUGforceType.COHESION);
    }
示例#2
0
    void calculateAlignment(AgentPau a)
    {
        Vector3 dirVec = new Vector3();

        foreach (AgentPau neightbour in a.neightbours)
        {
            dirVec += neightbour.velocity;
        }

        dirVec += a.velocity;
        dirVec /= a.neightbours.Count + 1;
        a.addForce(dirVec, AgentPau.DEBUGforceType.ALIGNMENT);
    }
示例#3
0
    void calculateSeparation(AgentPau a)
    {
        Vector3 separationVector = Vector3.zero;

        foreach (AgentPau neightbour in a.neightbours)
        {
            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, AgentPau.DEBUGforceType.SEPARATION);
    }
示例#4
0
    private void Awake()
    {
        List <AgentPau> agentlist = new List <AgentPau>();

        for (int i = 0; i < numBoids; i++)
        {
            Vector3 position = Vector3.up * Random.Range(0, 10)
                               + Vector3.right * Random.Range(0, 10) + Vector3.forward * Random.Range(0, 10);

            AgentPau newAgent = Instantiate(agentPrefab, transform.position + position, Quaternion.identity).GetComponent <AgentPau>();
            newAgent.radius = agentRadius;
            agentlist.Add(newAgent);
        }
        agents = agentlist.ToArray();
    }