Unity3D - Как мне создать полосу загрузки для предварительного создания экземпляра пула моих объектов? - PullRequest
0 голосов
/ 21 декабря 2018

Я использовал SceneManager.LoadSceneAsync () AsyncOperation, чтобы создать панель загрузки для моей сцены.Проблема в том, что после того, как полоса загрузки достигает 100%, она останавливается там (я на 99% уверен, что она выполняет предварительное создание пула объектов, который в настоящее время находится в методе Awake ()) в течение нескольких секунд, а затем загружает сцену,Как я могу изменить полосу загрузки, чтобы она учитывала время создания пула объектов?

public class LevelLoader : MonoBehaviour
{
public static LevelLoader instance;
public GameObject screen;
public Slider slider;
public TextMeshProUGUI progressText;
private float oldProgress = 0f;

private void Awake()
{
    DontDestroyOnLoad(gameObject);
    DontDestroyOnLoad(screen.transform.parent.gameObject);

    instance = this;
    screen.SetActive(false);
}

public void LoadLevel(int sceneIndex)
{
    StartCoroutine(LoadAsync(sceneIndex));
}

IEnumerator LoadAsync(int sceneIndex)
{
    AsyncOperation op = SceneManager.LoadSceneAsync(sceneIndex);
    screen.SetActive(true);
    while (!op.isDone)
    {
        System.Random rand = new System.Random();
        float progress = Mathf.Lerp(oldProgress, Mathf.Clamp01(op.progress / .9f), rand.Next()); 
        // for smoothness (doesn't actually work i think)

        slider.value = progress;
        progressText.text = (progress * 100f).ToString("f0") + "%";
        oldProgress = progress;

        yield return null;
    }
    screen.SetActive(false);
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...