2014-11-04 53 views
0

嗨即時團結和C#中的新手..如何使一個協程完成第一先於其他協程開始

我在同一個場景二的腳本文件,

1協同程序文件versionchecker.cs到從我的Web服務器

public string versionURL = "http://localhost/check.php"; 

IEnumerator GetVersion() 
{ 
    WWW vs_get = new WWW(versionURL); 
    yield return vs_get; 

    if (vs_get.error != null) 
    { 
     connection = 1; 
    } 
    else 
    { 
     currentVersion = vs_get.text; 
     bundleVersion = PlayerSettings.bundleVersion; 
     connection = 0; 
    } 
} 

得到一個版本號的數據,但在beginingscreen.cs另一個文件中,我有一個begining屏幕協程..

void Start() { 
    if(!isExit) 
     StartCoroutine (BeginningAnimation()); 
    else 
     StartCoroutine (EndAnimation()); 
} 

IEnumerator BeginningAnimation() 
{ 
    fade.FadeIn (1.5f); 
    yield return new WaitForSeconds (2); 
    fade.FadeOut (1); 
    yield return new WaitForSeconds (0.9f); 
    Application.LoadLevel (LevelToLoad); 
} 

IEnumerator EndAnimation() 
{ 
    yield return new WaitForSeconds (0.5f); 
    fade.FadeOut (1); 
    yield return new WaitForSeconds (1); 
    Application.Quit(); 
} 

這個腳本我把它放在我的遊戲的同一個場景中..但是有時候開始屏幕的協同程序首先在獲取版本的協程之前完成,因爲get版本需要連接到web服務器,並且有時web服務器滯後。 。

那麼,如何使GET版本協程完成第一,之後begining屏幕可以開始..

回答

0

兩種不同的方法:只

你可以只添加組件腳本(beginingscreen.cs)當第一個協程完成執行時。從而確保其他協程不會太早啓動。

IEnumerator GetVersion() 
{ 
    // ... 
    gameObject.AddComponent<BeginingScreen>(); 
} 

您可以開始方法beginingscreen.cs協同程序,然後調用GetVersion並等待其完成(GetVersion必須是公開可見):

IEnumerator Start() 
{ 
    var getVersion = gameObject.GetComponent<VersionChecker>(); 
    if (getVersion != null) 
    { 
     yield return StartCoroutine(getVersion.GetVersion()); 
    } 

    if(!isExit) 
     yield return StartCoroutine (BeginningAnimation()); 
    else 
     yield return StartCoroutine (EndAnimation()); 
} 

在兩種方案中,您需要這兩個組件(腳本)以某種方式相互交互。或者你可以創建一個處理這種交互的第三個腳本。

相關問題