void FollowCloseBoids() { Collider2D[] closeBoids = Physics2D.OverlapCircleAll(transform.position, range, LayerMask.GetMask("Boid")); // Get all boids in the range float size = 0f; Vector2 avgPosition = Vector2.zero; for (int i = 0; i < closeBoids.Length; i++) // For every close boid { Boid boid = closeBoids[i].GetComponent <Boid>(); if (!boid.CompareState(Boid.State.Shot)) { avgPosition += boid.GetPosition(); // Calculate average position size++; } } if (size > 0) { avgPosition /= size; Vector2 targetDirection = avgPosition - (Vector2)transform.position; // Get the direction from current position to the average position calculated and normalize it targetDirection = targetDirection.normalized; Vector2 currentDirection = rb.velocity.normalized; Vector2 newDirection = (currentDirection + 0.5f * targetDirection).normalized; rb.velocity = newDirection * speed; // Add an amount of } }
private void OnCollisionEnter2D(Collision2D collision) { if (collision.collider.CompareTag("Boid")) { Boid boid = collision.gameObject.GetComponent <Boid>(); if (boid.CompareState(Boid.State.Shot)) { Damage(); } else if (!isStun) { EatBoid(boid); } } }