2017-03-20 11 views
2

は、私のような複数のスクリプトを持っています。Unity:すべてのStart()関数の後にコルーチンが終了するのはなぜですか?</p> <ul> <li>がそれぞれに</li> <li>インベントリ</li> <li>GalaxyGenerator</li> </ul> <p>私はスタートを持って()終了/またはアウェイク()関数ItemDatabase:

  • アウェイク:
  • アウェイクをItemDatabase:GalaxyGenerator
  • スタート:インベントリ
  • スタート:GalaxyGenerator私は(順序を持っているために)私のような何かを得る、これらの機能にDEBUG.LOG()を置く場合

です。今、私はItemDatabaseでWWWクラスを使用してデータベースからアイテムを取得するためのコルーチンを追加、これは私が持っているものです。

void Awake(){ 
    Debug.Log("Awake : ItemDatabase"); 
    StartCoroutine(DoWWW()); 
} 

private IEnumerator DoWWW() 
{ 
    Debug.Log("Before www"); 
    www = new WWW("http://127.0.0.1:8000/api/items"); 
    yield return www; 

    Debug.Log("After www"); 

    itemData = JsonMapper.ToObject (www.text); 
    ConstructItemDatabase(); 
} 

void ConstructItemDatabase() 
{ 
    Debug.Log("Construct ItemDatabase"); 
} 

あなたは貴様Debug.Log()を見ることができる、と私は私のコンソールをチェックすると、今、私はこの順序を参照してください。

  • はアウェイク:GalaxyGenerator
  • スタート:WWW
  • 覚醒前
  • をItemDatabaseインベントリ
  • スタート:WWW
  • 構築物の後GalaxyGenerator
  • をItemDatabase

私の質問で、コルーチンの終わりはすべてStart()機能した後、なぜ?私の例では、Start : GalaxyGeneratorの前にConstructItemDatabase()にする必要があります。

アイデア?

答えて

3

あなたのWWWをダウンロードするには時間がかかるので、あなたのWWW呼び出しは物事の順序とは関係がなく、サーバーに要求を送信して応答を得ます。それが大きな反応の場合、時間がかかるでしょうが、UnityがあなたのAwakes and Startsを通過するのにかかる時間よりも時間がかかるでしょう。

WWWの実行後にStartメソッドが必要な場合は、Start()からコードを削除して、自分のメソッドに入れてください。例:InitializeInventory()InitializeGalaxyGenerator() WWWが完了したら、あなたがConstructItemDatabaseでやっているように。

private IEnumerator DoWWW() 
{ 
    Debug.Log("Before www"); 
    www = new WWW("http://127.0.0.1:8000/api/items"); 
    yield return www; 

    Debug.Log("After www"); 

    itemData = JsonMapper.ToObject (www.text); 
    ConstructItemDatabase(); 
    InitializeInventory(); 
    InitializeGalaxyGenerator(); 
} 

void ConstructItemDatabase() 
{ 
    Debug.Log("Construct ItemDatabase"); 
} 
+0

ありがとうございました。だからInit.csのようなスクリプトが最初に呼ばれ、すべてのコルーチンがここにあり、すべてのInitialize()関数が他のすべてのスクリプトに必要です。だからこれで私はStartとAwakeの機能を止める...問題じゃない? –

+0

私はあなたが何を意味しているのか分かりません。あなたが私の答えを理解し、あなたの提案がうまくいくと思うなら、試してみてください。 – Maakep

関連する問題

 関連する問題