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); }
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); }
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); }
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(); }