Unity - «Динамический» объект пула - PullRequest
0 голосов
/ 29 апреля 2019

Я делаю небольшую игру для Android и в настоящее время использую систему объединения, например, для врагов, снарядов и т. Д.

На данный момент я загружаю Async по уровням, когда вы играете в игру, что означает отсутствие загрузкисцена при выходе в новую зону.

Пул создается при запуске новой игры или при загрузке старого сохранения.Работает нормально, но оставляет одну проблему!Без загрузки сцен во время игры, нет времени для заполнения пула, кроме как в начале.Поскольку игрок потенциально может играть весь путь, хотя за один присест, это означает, что все объединенные в пул объекты должны быть загружены и созданы.

Я понимаю, что «Динамически» заполняет пул, во-первых, пропускает саму идею объединения в пул., но мне любопытно, какие решения люди придумали.Создание врагов на уровне 1, которые не будут использовать до тех пор, пока уровень 10 не покажется расточительным.

Приветствия:)

1 Ответ

0 голосов
/ 29 апреля 2019

Чтобы расширить мои комментарии, я сделал пример, который вы могли бы внедрить в свой код. Enable, disable и OnLevelFinishedLoading должны перейти куда-нибудь в ваш класс Level / SceneManager.

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

void OnEnable()
{   
    SceneManager.sceneLoaded += OnLevelFinishedLoading;
}

void OnDisable()
{  
    SceneManager.sceneLoaded -= OnLevelFinishedLoading;
}

void OnLevelFinishedLoading(Scene scene, LoadSceneMode mode)
{
    StartCoroutine(StartPoolingNextLevel(yourObjectPooler));
}

private IEnumerator StartPoolingNextLevel(YourObjectPoolerClass yourObjectPooler)
{
    for (int i = 0; i < yourObjectPooler.AmountToPool; i++)
    {
        yourObjectPooler.PoolItem(); // psuedo code
        yield return new WaitForEndOfFrame();
    }
}
...