Ejemplo n.º 1
0
    void Update()
    {
        while (objectQueue.Count > 0)//przeglądaj przeszkody w celu znalezienia tych do usunięcia. kolekcja jest posortowana.
        {
            if (objectQueue.Peek().position.z + destroyMargin < playerTransform.position.z)
            {
                Destroy(objectQueue.Dequeue().gameObject);
                //tylko minięcie jednej z dwóch ścianek powoduje avoidance (nie chcemy zgłaszać minięcie lewej i minięcie prawej przeszkody, tylko minięcie dziury)
                if (objectQueue.Peek().localPosition.x < 0)
                {
                    scoreController.collisionAvoided();//dodaj punkty za usuwaną przeszkodę
                }
            }
            else
            {
                break;
            }
        }

        //generowanie nowej przeszkody
        if (playerTransform.position.z - lastZPos >= zSpread)//czy już generować następną przeszkodę?
        {
            ObstacleGenerator.ObstacleParams op = generator.generateParams();
            //z pos
            var zPos = playerTransform.position.z + op.distance + drawOffset;
            //first lane
            Transform left = Instantiate(obstaclePrefab, new Vector3(0, op.height / 2, zPos), Quaternion.identity) as Transform;
            var       sc1  = left.localScale;
            sc1.x           = op.gapStart - op.start;
            sc1.y           = op.height;
            left.localScale = sc1;
            //second lane
            Transform right = Instantiate(obstaclePrefab, new Vector3(op.gapEnd, op.height / 2, zPos), Quaternion.identity) as Transform;
            var       sc2   = right.localScale;
            sc2.x            = op.end - op.gapEnd;
            sc2.y            = op.height;
            right.localScale = sc2;
            //przeskalowanie znormalizowanych parametrów przeszkody
            left.position  += new Vector3(-4.5f + left.localScale.x / 2, 0);
            right.position += new Vector3(-4.5f + right.localScale.x / 2, 0);
            objectQueue.Enqueue(left);
            objectQueue.Enqueue(right);
            lastZPos = playerTransform.position.z;
            zSpread  = op.distance;
        }
    }