团结游戏冻结



我有这段代码,但是当我尝试运行它时,Unity 冻结了,我有一个我看不到的无限循环吗?

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 = 13; 
    public int i;
    // Update is called once per frame
    void Update () {  //basically what it does is it doesn't hit the update until everything is loaded
        if (!_init)
            initializeCards ();
        if (Input.GetMouseButtonUp(0)) //player has left clicked
        checkCards();
    }

    void initializeCards()
    {
        for (int id = 0; id <2; id++)
        {
            for (i = 1; i < 14; 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()
    {
        return cardFace[i - 1];
    }
    void checkCards()
    {
        List<int> c = new List<int>();
        for (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("bedroomscene");
        }
        for (int i = 0; i < c.Count; i++){
            cards[c[i]].GetComponent<card>().state = x;
            cards[c[i]].GetComponent<card>().falseCheck();
        }
    }
}

有可能犯了一个非常愚蠢的错误,但请帮助我找到导致团结冻结的原因。

您确定对于卡阵列的至少一个组件初始化为吗?
否则,它不会从这个循环中断:
此外,由于选择的值是随机的。它也不确定它是否会打破 while 循环。

while (!test)
{
     choice = Random.Range(0, cards.Length);
     test = !(cards [choice].GetComponent<card>().initialized);
}

最新更新