2016-03-12 4 views
1

Я делаю игру с Unity, и я использую SceneManager.LoadScene для загрузки с главной сцены, чтобы играть в сцену. Все в порядке, но это занимает слишком много времени. Итак, игра переместится с главной сцены на сцену, но есть слайдер между двумя сценами.Unity LoadScene too long

Это мой код:

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
using UnityEngine.SceneManagement; 

public class Load : MonoBehaviour 
{ 
    public Slider LoadSlider; 
    public Text percentSlider; 

    void Start() 
    { 
     InvokeRepeating ("AdLoadPercent", 0.01f, 0.4f); 
    } 

    public void AdLoadPercent() 
    { 
     LoadSlider.value += Random.Range(0.6f,0.9f); 
     percentSlider.text=Mathf.RoundToInt(LoadSlider.value*100).ToString() + " %"; 

     if (LoadSlider.value >= 1f) 
     { 
      SceneManager.LoadScene ("Scena1"); 
     } 
    } 
} 

Почему это так долго, когда мой слайдер равен 1?

«long» означает, что я должен ждать более 15 секунд.

Спасибо и наилучшие пожелания

+0

Кроме того, вы можете остановить приращение, если значение > = 1, потому что 'LoadScene()' вызывается снова и снова. – Reynevan

ответ

0

Это то же самое, не используя ползунок?

Я не использовал InvokeRepeating, даже не слышал об этом, так что есть шанс, что что-то происходит с этой функцией.

Место LoadScene() линия в функции Start() и посмотреть, поможет ли это. Если он мгновенно переключает сцены (или почти, как в < 1,25 с), это проблема с вашей повторяющейся функцией. Для таких вещей, как, что я рекомендую использовать Update() функцию или пример IENumerator

# 1:

bool loadingStarted = false; 
void Start() 
{ 
    loadingStarted = true; 
} 

void Update() 
{ 
    if(loadingStarted) 
    { 
     progressbar.value += Time.deltaTime*0.25f; 
     //.. and so on ... 
    } 
} 

Пример № 2:

void Start() 
{ 
    StartCoroutine(Countdown()); 
} 

IENumerator Countdown() 
{ 
    while(progressBar.value < 1f) 
    { 
     //Do your incrementation here... 
     if(progressBar.value >= 1f) break; 
     return yield new WaitForEndOfFrame(); //or WaitForSeconds(0.05); 
    } 
} 
+0

вы никогда не слышали о 'InvokeRepeating'? это восхитительно. это, возможно, самая используемая функция в Unity. это здорово знать о сопрограммах, но замечательно, что никогда не сталкивались с «Invoke» или «InvokeRepeating»! – Fattie

+0

Эй, у меня такая же проблема, когда я запустил функцию SceneManager.LoadScene («Scena1»). У меня есть одна сцена с этим слайдером, поэтому главное меню -> слайдер-> сцена для воспроизведения. – mavericks

+0

Попробуйте добавить слайдер в основную сцену. Создайте сборку с черным изображением пользовательского интерфейса, заполняющим весь холст, и слайдер в углу или что-то в этом роде. Вы можете создать экземпляр префаба после нажатия кнопки и установить его родительский как таковой: 'loading.transform.SetParent (GameObject.Find (« Canvas »), false)'. Это должно работать, если переход к главному меню перехода в слайдер мгновенно работал. – Reynevan