我决定创建一个像游戏一样的小记忆,用unity3d学习游戏开发。
游戏应在玩家点击卡片后等待 2 秒,然后再将卡片翻转回来。
-statementyield 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
一切正常(除了玩家看不到第二张牌,因为它会立即翻转回来)。
我的收益回报有什么问题?