// Update is called once per frame void Update( ) { new Thread(() => { //run through all boids. for (int i = _boids.Count - 1; i >= 0; --i) { Boid b = _boids[i]; //get the boids current velocity. Vector3 velocity = b.velocity; //add the influences of neighboring boids to the velocity. velocity += _alignment.getResult(_boids, i); velocity += _cohesion.getResult(_boids, i); velocity += _separation.getResult(_boids, i); //normalize the velocity and make sure that the boids new velocity is updated. velocity.Normalize( ); b.velocity = velocity; b.lookat = b.position + velocity; } }).Start( ); for (int i = _boids.Count - 1; i >= 0; --i) { //update the boids position in the mainthread. _boids[i].transform.position += _boids[i].velocity * Time.deltaTime * speed; } }