2016-03-12 114 views
1

我在Unity中制作游戏,我使用SceneManager.LoadScene从主场景加载场景。一切都很好,但需要很长时间。所以,游戏从主场景移动到场景,但在两个场景之间有一个滑块。Unity LoadScene太长了

这是我的代码:

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?

“长”意味着我必须等待15秒以上。

感谢和亲切的问候

+0

此外,您可能要停止递增,如果该值> = 1,因为'LoadScene()'被一次又一次地调用。 – Reynevan

回答

0

是它不使用滑块一样吗?

我还没有使用过InvokeRepeating,甚至从来没有听说过它,所以这个功能有可能会发生。

LoadScene()放在Start()函数中,看看是否有帮助。如果它瞬间切换场景(或者几乎如< 1.25s),那么重复功能就会出现问题。对于这样的事情,我建议使用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

尝试在主场景中添加滑块。用填充整个画布的黑色UI图像创建一个预制件,并在角落或其他位置使用滑块。您可以在按下按钮后实例化预制件,并将其父设置为:'loading.transform.SetParent(GameObject.Find(“Canvas”),false)'。这应该工作,如果从主菜单过渡到滑块立即工作。 – Reynevan