こんばんは
プログラミング初心者です。
MoveEnemies()というコルーティーンで二箇所WaitForSecondsを挿入したい部分があるのですが、下の配置以外ではうまく動作が止まらず、プレイヤーが暴走します。
IEnumerator MoveEnemies() { enemiesTurn = true; yield return new WaitForSeconds(turnDelay); playersTurn = true; enemiesTurn = false; }
例えば、次のような配置は何がおかしいのでしょうか。
IEnumerator MoveEnemies() { yield return new WaitForSeconds(turnDelay); enemiesTurn = true; yield return new WaitForSeconds(turnDelay); playersTurn = true; enemiesTurn = false; }
ご回答ありがとうございます。プレイヤー側のこの部分に関する一連のソースは次の通りです。
なお、暴走するのは十字キーを長押しした時です。どうやらplayerはturnDelay一回分停止したのちturnDelay一回分暴走するという挙動をしているようです。不思議なのはキーを押した最初のターンはしっかり止まってくれることです。
// Playerというスクリプト上のUpdateと呼び出す関数 private void Update () { if (!playersTurn) playersTurn = gameScript.playersTurn; if (!playersTurn) return; horizontal = (int)Input.GetAxisRaw ("Horizontal"); vertical = (int)Input.GetAxisRaw ("Vertical"); if (horizontal != 0 || vertical != 0) { AttemptMove (horizontal, vertical, false); } } protected override void AttemptMove (int xDir, int yDir, bool isEnemy) { base.AttemptMove (xDir, yDir, isEnemy); playersTurn = false; gameScript.ChangePlayersTurn (); //上のMoveEnemies()が属するスクリプトでplayersTurnをfalseにする関数です。 } // MoveEnemiesを呼び出すのはMoveEnemiesと同じスクリプト上の次の関数です。 void Update () { if (!playersTurn && !enemiesTurn) { StartCoroutine (MoveEnemies ()); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/08 14:07