0

NGUIで簡単なメニューアニメーションを作る機能があります。うまく機能しているように見えますが、ゲームに入ってからメニューに戻ると、機能が正しく機能していません。

IEnumerator MenuTransition (GameObject panelOut, GameObject panelIn) {
    foreach (Transform child in panelOut.transform)
    {
        if(child.gameObject.collider != null)
        {
            child.gameObject.collider.enabled = false;
            UIButton [] buttons = child.GetComponents<UIButton>();
            foreach(UIButton b in buttons) b.UpdateColor(true, true);
        }
        child.gameObject.animation.Play("MenuTransitionOff");
    }
    Debug.Log("time: "+animTime);
    //yield return new WaitForSeconds(animTime);
    Debug.Log("ini");
    foreach (Transform child in panelIn.transform)
    {       
        UIButton [] buttons = child.GetComponents<UIButton>();
        foreach(UIButton b in buttons) b.UpdateColor(true, true);
        child.gameObject.animation.Play("MenuTransitionOn");
    }
    //yield return new WaitForSeconds(animTime);
    foreach (Transform child in panelIn.transform)
    {           
        if(child.gameObject.collider != null)
        {
            child.gameObject.collider.enabled = true;
        }
    }
    Debug.Log("3");
    yield return null;
    Debug.Log("4");
}

そして、この関数は、ボタンの onclick イベントに割り当てられた別の関数から呼び出されます (NGUI を使用)。

void OnMainMatch () {
    StartCoroutine(MenuTransition(mainPanel, matchPanel));
}

利回りのコメントを外すと、アプリは最初の 1 つでクラッシュしたように見え、その後ログは表示されませんが、2 つの利回りをコメントして最後に 1 つ追加しても、アニメーションが表示されず、ボタンが反応しなくなります。最後のケースでは、4 が出力されます。これは、メニューが最初に実行されたときではなく、ゲームに入ってメニューに戻った後にのみ発生します。アニメーション時間もデバッグしましたが、1 秒未満なので正しいです。どこでエラーを探すべきか本当にわかりません。どこを探すべきかについて何か考えはありますか?

4

1 に答える 1

0

NGUI の OnClick とコルーチンで同じような問題が発生しました。これは、StartCoroutine を呼び出した後に OnClick ボタンが非アクティブに設定されたために発生しました。これにより、コルーチンを管理するのは OnClick オブジェクトであるため、コルーチンの反復が消滅します。ただし、これが同じ問題かどうかはわかりません。

于 2013-07-23T06:13:09.163 に答える