概要
- 必要なデータが受け取れてない状態でゲーム画面に移行してしまうとゲームが正常に動作しない。
- DBとの接続時、必要なデータが揃ってステートを遷移したい。
流れ
- ステートを管理するGameManagerを生成する
- DBとの通信が完了次第次のステートに移動する。
コード
コールチン内でコールチンを呼ぶ。
- コールチンの親が子コールチンの総括をしていると考えています。
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;
}
}
各々のコールチン
- isTitleClickがfalseになるまで次のステートに遷移することを食い止めます
TITLE
IEnumerator StartTitle() {
titleObj.GetComponent<Text>().text = "TITLE";
while(isTitleClick) {
yield return null;
}
isTitleClick = true;
}
LOAD
- mysqlの通信が完了するまで次のステートに遷移することを食い止めます
IEnumerator StartHTTP() {
mysql = GetComponent<CheckMySQL>();
mysql.StartHTTP();
while(!mysql.GetIsHTTPCompoleted()) {
titleObj.GetComponent<Text>().text = "LOAD";
yield return null;
}
}
PLAY
- 無限ループになってしまっていますが、一定間隔でモンスターを生成しています。
- ゲームの大きな機能(例えば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;
}
}