예제 #1
0
    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
        }
    }
예제 #2
0
    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);
            }
        }
    }