コード例 #1
0
    public override void UpdateVectors(List <IBoid> boids, BoidsBehaviourPreset preset)
    {
        Vector2 aligment   = Vector2.zero;
        Vector2 cohesion   = Vector2.zero;
        Vector2 separation = Vector2.zero;

        Vector2 area = Vector2.zero;

        int countOfNearby = 0;

        for (int i = boids.Count - 1; i >= 0; i--)
        {
            Boid2D boid = (Boid2D)boids[i];
            if (boid != this && IsNearby(boid))
            {
                aligment += boid.Velocity;
                cohesion += boid.Position;

                float distance = Vector2.Distance(Position, boid.Position);
                separation += (Position - boid.Position) / Mathf.Pow(distance, 2);

                countOfNearby++;
            }
        }

        if (countOfNearby > 0)
        {
            aligment   /= (float)countOfNearby;
            cohesion   /= (float)countOfNearby;
            separation /= (float)countOfNearby;

            cohesion -= Position;

            aligment   *= preset.aligment;
            cohesion   *= preset.cohesion;
            separation *= preset.separation;

            Vector2 newForce = (cohesion + aligment + separation);

            currentDirection = (newForce + currentDirection).normalized;
        }
    }
コード例 #2
0
ファイル: AbstractBoid.cs プロジェクト: alinouski/BoidsSystem
 public abstract void UpdateVectors(List <IBoid> boids, BoidsBehaviourPreset preset);