예제 #1
0
    void ApplyRules()
    {
        GameObject[] gos;
        gos = FishManager.allFish;

        Vector3 Centre  = Vector3.zero;
        Vector3 Avoid   = Vector3.zero;
        float   gSpeed  = 0.1f;
        Vector3 goalPos = FishManager.goal;

        float dist;
        int   groupSize = 0;

        for (int i = 0; i < gos.Length; i++)
        {
            if (gos[i] == this)
            {
                continue;
            }

            dist = Vector3.Distance(gos[i].transform.position, transform.position);

            if (dist <= neighbourDistance)
            {
                Centre += gos[i].transform.position;
                groupSize++;

                if (dist < 1f)
                {
                    Avoid = Avoid + (transform.position - gos[i].transform.position);
                }
                fishMovement anotherFish = gos[i].GetComponent <fishMovement>();
                gSpeed = gSpeed + anotherFish.speed;
            }
        }

        if (groupSize > 0)
        {
            Centre = Centre / groupSize + (goalPos - transform.position);
            speed  = gSpeed / groupSize;
            Vector3 dir = (Centre + Avoid) - transform.position;

            if (dir != Vector3.zero)
            {
                transform.rotation = Quaternion.Slerp(transform.rotation,
                                                      Quaternion.LookRotation(dir),
                                                      rotationSpeed * Time.deltaTime);
            }
        }
    }
예제 #2
0
 public fishInMouth(fishMovement m, Rigidbody2D r)
 {
     movement = m;
     rb       = r;
     collider = rb.GetComponent <Collider2D>();
 }
예제 #3
0
 public fishInMouth(fishMovement m, Rigidbody2D r)
 {
     movement = m;
     rb       = r;
 }