Star☆Unityメモ

Unityのちょっとしたことをメモって後で見返せれたらいいなサイト

コールチンで通信完了まで待機

f:id:zvn_X:20170109232813g:plain

概要

  1. 必要なデータが受け取れてない状態でゲーム画面に移行してしまうとゲームが正常に動作しない。
  2. DBとの接続時、必要なデータが揃ってステートを遷移したい。

流れ

  1. ステートを管理するGameManagerを生成する
  2. DBとの通信が完了次第次のステートに移動する。

コード

コールチン内でコールチンを呼ぶ。

  1. コールチンの親が子コールチンの総括をしていると考えています。
        void Awake () {
        StartCoroutine("GameState");
    }


    IEnumerator GameState(){
        while (true) {
            //TITLE
            yield return StartCoroutine("StartTitle");
            //LOAD
            yield return StartCoroutine("StartHTTP");
            //ゲームMAIN
            yield return StartCoroutine("StartPlay");

            yield return null;
        }
    }

各々のコールチン

  1. isTitleClickがfalseになるまで次のステートに遷移することを食い止めます

TITLE

   IEnumerator StartTitle() {
                titleObj.GetComponent<Text>().text = "TITLE";      
                while(isTitleClick) { 
            yield return null;
        }
        isTitleClick = true;
    }

LOAD

  1. mysqlの通信が完了するまで次のステートに遷移することを食い止めます
   IEnumerator StartHTTP() {
        mysql = GetComponent<CheckMySQL>();
        mysql.StartHTTP();
        while(!mysql.GetIsHTTPCompoleted()) {
            titleObj.GetComponent<Text>().text = "LOAD";
            yield return null;
        }
    }

PLAY

  1. 無限ループになってしまっていますが、一定間隔でモンスターを生成しています。
  2. ゲームの大きな機能(例えばEnemyManagerをActiveにするなどを入れると良いかもしれません.
   IEnumerator StartPlay(){
        titleObj.GetComponent<Text>().text = "PLAY";
        while(true){
            timeElapsed += Time.deltaTime;
            if (timeElapsed >= timeOut) {
                monsterBase.CreateEnemy(mysql);
                timeElapsed = 0.0f;
            }
            yield return null;
        }
    }