所以我很讨厌C#。我目前正在接受一个教程来制作一个记忆游戏(https://www.youtube.com/watch?v=prfzIpNhQMM)。由于未知的无限循环,Unity不断崩溃?
我已经全部跟踪并设法解决了我遇到的所有问题,直到现在;每次我点击游戏时,Unity都会冻结。对于与创作者有同样问题的人的视频,有一些评论说它可能是由于代码中的无限循环造成的。我没有足够的知识让我认识到其中的一个。
我知道问题出在我的GameManager脚本上。如果有人能看一看过目一下,看看他们是否能找到我的问题,我将不胜感激:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;
using System.Collections.Generic;
public class GameManager : MonoBehaviour {
public Sprite[] cardFace;
public Sprite cardBack;
public GameObject[] cards;
public Text matchText;
private bool _init = false;
private int _matches = 6;
// Update is called once per frame
void Update() {
if (!_init)
initializeCards();
if (Input.GetMouseButtonUp(0))
checkCards();
}
void initializeCards()
{
for(int id = 0; id < 2; id++)
{
for(int i = 1; i < 6; i++)
{
bool test = false;
int choice = 0;
while (!test) {
choice = Random.Range(0, cards.Length);
test = !(cards[choice].GetComponent<Card>().initialized);
}
cards[choice].GetComponent<Card>().cardValue = i;
cards[choice].GetComponent<Card>().initialized = true;
}
}
foreach (GameObject c in cards)
c.GetComponent<Card>().setupGraphics();
if (!_init)
_init = true;
}
public Sprite getCardBack()
{
return cardBack;
}
public Sprite getCardFace(int i)
{
return cardFace[i - 1];
}
void checkCards()
{
List<int> c = new List<int>();
for(int i = 0; i < cards.Length; i++)
{
if (cards[i].GetComponent<Card>().state == 1)
c.Add(i);
}
if (c.Count == 2)
cardComparison(c);
}
void cardComparison(List<int> c)
{
Card.DO_NOT = true;
int x = 0;
if(cards[c[0]].GetComponent<Card>().cardValue == cards[c[1]].GetComponent<Card>().cardValue)
{
x = 2;
_matches--;
matchText.text = "Number of Matches: " + _matches;
if (_matches == 0)
SceneManager.LoadScene("VirusInfo3");
}
for(int i = 0; i < c.Count; i++)
{
cards[c[i]].GetComponent<Card>().state = x;
cards[c[i]].GetComponent<Card>().falseCheck();
}
}
}
谢谢!
我没有看到任何可能导致此代码中的无限循环的东西。你必须发布其他脚本。这可能不是你发布的这个。我可能是错的... – Programmer
我认为你犯了一个错误_“我知道问题出在我的GameManager脚本上,而你已经发布了'Card'类。 –
你能分享你的GameManager脚本吗?视频下的评论有一个:https://pastebin.com/MMV5gkFs,但我不确定它是否与您的相同。如果是这种情况,那么checkCards()方法会有一个无限循环:'for(int i = 0; 1
buxter