Переключение сцен Unity занимает слишком много времени - PullRequest
0 голосов
/ 29 июня 2018

Я создал игру с главным меню в сцене, и у меня есть вторая сцена, в которой есть настоящая игра. Когда пользователь нажимает кнопку воспроизведения на сцене главного меню, он загружает реальную игровую сцену, но проблема в том, что это занимает слишком много времени. Что мне делать?

Вот код, который я использую:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MainMenu : MonoBehaviour {

    public void PlayGame()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);

    }
    public void QuitGame()
    {
        Debug.Log("Ho gaya....! Mera Ho gya");
        Application.Quit();
    }
}

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

В дополнение к вышесказанному, вы также можете подождать, пока упомянутое нажатие кнопки вызовет SceneManager.LoadSceneAsync, но отобразить шторку (или экран загрузки), пока загружается реальная игровая сцена. Coroutines - ваш друг здесь, так как вы можете дождаться завершения AsyncOperation до yield return, получая его от Coroutine IE

var curtain = Instantiate(CurtainPrefab);
DontDestoryOnLoad(curtain);
yield return SceneManager.LoadSceneAsync(gameSceneIndex);

// Don't allow unload to clean up this object or it'll stop the coroutine before destroying the curtain!
DontDestroyOnLoad(gameObject);
yield return SceneManager.UnloadSceneAsync(mainMenuSceneIndex);
Destroy(curtain);

// Do this last or the Coroutine will stop short
Destroy(gameObject);
0 голосов
/ 29 июня 2018

Вы можете использовать LoadSceneAsync, чтобы загрузить уровень заранее, но не активировать его, вы получите обратный вызов, когда загрузка будет завершена, и затем вы можете просто активировать сцену, когда пользователь нажимает кнопку, которая должна быть мгновенной

...