だから私はC#で非常にnoobyです。私は現在、メモリゲーム(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();
}
}
}
ありがとう!
while (!test) {
choice = Random.Range(0, cards.Length);
test = !(cards[choice].GetComponent<Card>().initialized);
}
このセクションの問題であることを、すべてのあなたのカードが初期化されている場合(その初期化される:
このコードに無限ループを引き起こす可能性のあるものはありません。他のスクリプトを投稿する必要があります。あなたが投稿したものではない可能性があります。私は間違っているかもしれません... – Programmer
あなたは間違いを犯したと思います。「私の問題は私のGameManagerスクリプトで知っています」_そしてあなたは 'Card'クラスを投稿しました。 –
GameManagerスクリプトを共有できますか?動画のコメントにはhttps://pastebin.com/MMV5gkFsというものがありますが、あなたと同じものかどうかはわかりません。このような場合、checkCards()メソッドは無限ループになります。 'for(int i = 0; 1
buxter