C# бесконечное нерестилище платформ - создаст ли это лаг?

Хорошо, я работаю в Unity в C#, и я создал несколько простых функций для бесконечного появления ряда платформ (игровых объектов) в соответствии с позицией игрока по оси z. Я удаляю игровые объекты, как только они надежно исчезли из виду, и вызываю этот метод обновления каждый раз, когда игрок движется вперед:

void spawnSectorGroup()
    {
        int i = numSectorsToSpawn; //get position of last sectors, when its exceeded by player then delete and spawn again
        while (i >= 0) {
            int j = Random.Range (0, sectors.Length);
            spawnSector (gamePosition.position, sectors [j]);
            i--;
        }
    }
    void checkAndUpdateSectors() 
    {
        //print ("Player pos"+playerPosition.position);
        //print ("last sector"+gamePosition.position);

        if (gamePosition.position.z - playerPosition.position.z <= 20) { //safe value ahead
            print ("theyre almost there, spawn new group");
            print (gamePosition.position.z - playerPosition.position.z);
            spawnSectorGroup ();

        }

        //destroy past ones
        GameObject[] objects = FindObjectsOfType(typeof(GameObject)) as GameObject[];
        //GameObject[] objects = GameObject.FindGameObjectsWithTag("Block");
        foreach (GameObject o in objects) {

            if (o.gameObject.tag == "Block" || o.gameObject.tag == "Cage" || o.gameObject.tag == "Animal" || o.gameObject.tag == "Enemy") {

                if (playerPosition.position.z - o.transform.position.z >= 100) { //safe aways back

                    print ("destroying past object");
                    print (o.transform.position);
                    Destroy (o.gameObject);
                }
            }

        }

    }
void spawnSector(Vector3 relativePosition,GameObject sector){
        GameObject newSector = GameObject.Instantiate (sector, relativePosition, transform.rotation) as GameObject;
        gamePosition.position += newSector.GetComponent<Sector> ().length;
    }

Это все работает, однако в долгосрочной перспективе я волнуюсь, если это порождение примерно 10 новых "секторов" каждый раз, когда игрок находится в пределах 20 или около того единиц, будет нарастать единицы последнего порожденного сектора и создавать лаг из множества игровых объектов.

Я не имел опыта с неопределенным нерестом - это будет проблемой? Или это хорошая практика с неопределенным нерестом?

1 ответ

Создание и уничтожение объектов стоит дорого, и вы не должны делать это в больших количествах во время игры.

Посмотрите это руководство по объединению объектов в Unity. Основная идея заключается в том, что вместо создания и уничтожения объектов вы берете их из пула существующих объектов и возвращаете их, когда закончите, чтобы их можно было использовать повторно.

Другие вопросы по тегам