コード例 #1
0
    public List <Asset_Boid> RequestMyNeighbors(Asset_Boid b)
    {
        // Using manager based neighbor calulation for better scheduling
        // Permits significanly greater number of simultaneously active boids with less chance of variable frame hits

        List <Asset_Boid> _neighborsToReturn = new List <Asset_Boid>();

        for (int i = 0; i < boids.Count; i++)
        {
            if (b != boids[i])
            {
                if (Vector3.Distance(b.transform.position, boids[i].transform.position) <= 20)
                {
                    _neighborsToReturn.Add(boids[i]);
                }

                if (_neighborsToReturn.Count > 20)
                {
                    return(_neighborsToReturn);
                }
            }
        }

        if (_neighborsToReturn.Count == 0)
        {
            return(null);
        }
        else
        {
            return(_neighborsToReturn);
        }
    }
コード例 #2
0
    void Start()
    {
        _GetNewPOI();

        for (int i = 0; i < numberOfBoids; i++)
        {
            GameObject b  = Instantiate(boid, newPOI + Random.insideUnitSphere * 5, Quaternion.identity, null);
            Asset_Boid bd = b.GetComponent <Asset_Boid>();

            bd.ManagerRegister(this);
            boids.Add(bd);
        }
        _SetTuningValues();

        newPOITime  = Random.Range(0.0f, 15.0f);
        newPOITimer = Random.Range(0.0f, 15.0f);
    }