unity3d でゲーム開発を学ぶために、ゲームのような小さなメモリを作成することにしました。
プレイヤーがカードをクリックしてからカードを裏返すまで、ゲームは 2 秒待機する必要があります。
-yield return new WaitForSeconds(2)
ステートメントはこれに最適なはずですが、関数の行が実行されないという効果があります。
これが私のコードです:
これにより、カード グリッド (ボタン付き) が構築され、カードがクリックされたときにカードを裏返す関数が呼び出されます。
Card card = grid[i, j];
if (GUILayout.Button(new GUIContent((Texture) Resources.Load(card.getImg()), ""), GUILayout.Width(cardWidth))) {
Debug.Log("Call FlipCard");
FlipCardFaceUp(card);
Debug.Log("Returned from FlipCard");
}
これはフリップ関数です。
System.Collections.IEnumerable FlipCardFaceUp(Card card) {
Debug.Log("This isn't shown in the console");
card.isFaceUp = true;
if (!cardsFlipped.Contains(card)) {
cardsFlipped.Add(card);
if (cardsFlipped.Count >= 2) {
playerCanClick = false;
//Waiting 2 seconds before the cards are flipped back or are removed
yield return new WaitForSeconds(2);
if (cardsFlipped[0].id == cardsFlipped[1].id) {
cardsFlipped[0].isMatched = true;
cardsFlipped[1].isMatched = true;
} else {
cardsFlipped[0].isFaceUp = false;
cardsFlipped[1].isFaceUp = false;
}
cardsFlipped.Clear();
playerCanClick = true;
}
}
}
これは、ゲームをテストしてカードをクリックしたときのコンソール出力です。
Call FlipCard
Returned from FlipCard
に必要なものを削除すると、yield return
すべて正常に動作します (ただし、2 枚目のカードはすぐに裏返されるため、プレイヤーは見ることができません)。
イールドリターンの何が問題になっていますか?