Unity "IndexOutOfRangeException: Index was outside the bounds of the array." hatası

emre1035

Femtopat
Katılım
20 Nisan 2023
Mesajlar
40
Daha fazla  
Cinsiyet
Erkek
Merhaba. Ben bir soru-cevap oyunu yapıyordum fakat "IndexOutOfRangeException: Index was outside the bounds of the array." sorunu karşıma çıktı. Görselleri aşağıya bıraktım
 

Dosya Ekleri

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    68,8 KB · Görüntüleme: 51
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using TMPro;
using Random = UnityEngine.Random;
public class GameController : MonoBehaviour
{



public TextMeshProUGUI questionDisplayText;
public TextMeshProUGUI scoreDisplayText;
public SimpleObjectPool answerButtonObjectPool;
public Transform answerButtonParent;
public GameObject questionDisplay;

private DataController dataController;
private RoundData currentRoundData;
private QuestionData[] questionPool;

private bool isRoundActive;
private int questionIndex;
private int playerScore;
private List<GameObject> answerButtonGameObjects = new List<GameObject>();

// Use this for initialization
void Start()
{
dataController = FindObjectOfType<DataController>();
currentRoundData = dataController.GetCurrentRoundData();
questionPool = currentRoundData.questions;

{
playerScore = 0;
questionIndex = Random.Range(0, 4);
}
ShowQuestion();
isRoundActive = true;

}

private void ShowQuestion()
{
RemoveAnswerButtons();
QuestionData questionData = questionPool[questionIndex];
questionDisplayText.text = questionData.questionText;

for (int i = 0; i < questionData.answers.Length; i++)
{
GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();
answerButtonGameObjects.Add(answerButtonGameObject);
answerButtonGameObject.transform.SetParent(answerButtonParent);

AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
answerButton.Setup(questionData.answers);
}
}

private void RemoveAnswerButtons()
{
while (answerButtonGameObjects.Count > 0)
{
answerButtonObjectPool.ReturnObject(answerButtonGameObjects[0]);
answerButtonGameObjects.RemoveAt(0);
}
}

public void AnswerButtonClicked(bool isCorrect)
{

playerScore += currentRoundData.pointsAddedForCorrectAnswer;
scoreDisplayText.text = "Score: " + playerScore.ToString();

questionIndex++;
ShowQuestion();


}

// Update is called once per frame
void Update()
{

}
}


Kodları atar mısınız?
Attım
 
Using unityengine;
Using System. Collections;
Using unityengine. UI;
Using unityengine. Scenemanagement;
Using System. Collections. Generic;
Using tmpro;
Using random = unityengine. Random;
Public class gamecontroller: Monobehaviour.
{

Public textmeshprouguı questiondisplaytext;
Public textmeshprouguı scoredisplaytext;
Public simpleobjectpool answerbuttonobjectpool;
Public transform answerbuttonparent;
Public gameobject questiondisplay;

Private datacontroller datacontroller;
Private rounddata currentrounddata;
Private questiondata[] questionPool;

private bool isRoundActive;
private int questionIndex;
private int playerScore;
private List<GameObject> answerButtonGameObjects = new List<GameObject>();

// Use this for initialization.
void Start()
{
dataController = FindObjectOfType<DataController>();
currentRoundData = dataController.GetCurrentRoundData();
questionPool = currentRoundData.questions;

{
playerScore = 0;
questionIndex = Random.Range(0, 4);
}
ShowQuestion();
isRoundActive = true;

}

private void ShowQuestion()
{
RemoveAnswerButtons();
QuestionData questionData = questionPool[questionIndex];
Questiondisplaytext. Text = questiondata. Questiontext;

For (int i = 0; i < questiondata. Answers. Length; i++)
{
Gameobject answerbuttongameobject = answerButtonObjectPool.GetObject();
Answerbuttongameobjects. Add(answerbuttongameobject);
Answerbuttongameobject. Transform. Setparent(answerbuttonparent);

Answerbutton answerbutton = answerButtonGameObject.GetComponent<AnswerButton>();
Answerbutton. Setup(questiondata. Answers);
}
}

Private Void RemoveAnswerButtons()
{
While (answerbuttongameobjects. Count > 0)
{
Answerbuttonobjectpool. Returnobject(answerbuttongameobjects[0]);
Answerbuttongameobjects. Removeat(0);
}
}

Public Void answerbuttonclicked(bool iscorrect)
{

Playerscore += currentrounddata. Pointsaddedforcorrectanswer;
Scoredisplaytext. Text = "score: " + playerScore.ToString();

Questionındex++;
ShowQuestion();

}

// Update is called once per frame.
Void Update()
{

}
}


Attım.

C#:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using TMPro;
using Random = UnityEngine.Random;
public class GameController : MonoBehaviour.
{

public TextMeshProUGUI questionDisplayText;
public TextMeshProUGUI scoreDisplayText;
public SimpleObjectPool answerButtonObjectPool;
public Transform answerButtonParent;
public GameObject questionDisplay;

private DataController dataController;
private RoundData currentRoundData;
private QuestionData[] questionPool;

private bool isRoundActive;
private int questionIndex;
private int playerScore;
private List<GameObject> answerButtonGameObjects = new List<GameObject>();

// Use this for initialization.
void Start()
{
dataController = FindObjectOfType<DataController>();
currentRoundData = dataController.GetCurrentRoundData();
questionPool = currentRoundData.questions;

playerScore = 0;
questionIndex = Random.Range(0, 2);
ShowQuestion();
isRoundActive = true;

}

private void ShowQuestion()
{
RemoveAnswerButtons();
QuestionData questionData = questionPool[questionIndex];
questionDisplayText.text = questionData.questionText;

for (int i = 0; i < questionData.answers.Length; i++)
{
GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();
answerButtonGameObjects.Add(answerButtonGameObject);
answerButtonGameObject.transform.SetParent(answerButtonParent);

AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
answerButton.Setup(questionData.answers);
}
}

private void RemoveAnswerButtons()
{
while (answerButtonGameObjects.Count > 0)
{
answerButtonObjectPool.ReturnObject(answerButtonGameObjects[0]);
answerButtonGameObjects.RemoveAt(0);
}
}

public void AnswerButtonClicked(bool isCorrect)
{

playerScore += currentRoundData.pointsAddedForCorrectAnswer;
scoreDisplayText.text = "Score: " + playerScore.ToString();

questionIndex++;
ShowQuestion();

}

// Update is called once per frame.
void Update()
{

}
}

Dener misiniz?
 
"Argument 1: cannot convert from 'AnswerData[]' to 'AnswerData'"
şöyle bir sorun çıktı.
C#:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using TMPro;
using Random = UnityEngine.Random;
public class GameController : MonoBehaviour.
{

public TextMeshProUGUI questionDisplayText;
public TextMeshProUGUI scoreDisplayText;
public SimpleObjectPool answerButtonObjectPool;
public Transform answerButtonParent;
public GameObject questionDisplay;

private DataController dataController;
private RoundData currentRoundData;
private QuestionData[] questionPool;

private bool isRoundActive;
private int questionIndex;
private int playerScore;
private List<GameObject> answerButtonGameObjects = new List<GameObject>();

// Use this for initialization.
void Start()
{
dataController = FindObjectOfType<DataController>();
currentRoundData = dataController.GetCurrentRoundData();
questionPool = currentRoundData.questions;

playerScore = 0;
questionIndex = Random.Range(0, 2);
ShowQuestion();
isRoundActive = true;

}

private void ShowQuestion()
{
RemoveAnswerButtons();
QuestionData questionData = questionPool[questionIndex];
questionDisplayText.text = questionData.questionText;

for (int i = 0; i < questionData.answers.Length; i++)
{
GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();
answerButtonGameObjects.Add(answerButtonGameObject);
answerButtonGameObject.transform.SetParent(answerButtonParent);

AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
answerButton.Setup(questionData.answers);
}
}

private void RemoveAnswerButtons()
{
while (answerButtonGameObjects.Count > 0)
{
answerButtonObjectPool.ReturnObject(answerButtonGameObjects[0]);
answerButtonGameObjects.RemoveAt(0);
}
}

public void AnswerButtonClicked(bool isCorrect)
{

playerScore += currentRoundData.pointsAddedForCorrectAnswer;
scoreDisplayText.text = "Score: " + playerScore.ToString();

questionIndex++;
ShowQuestion();

}

// Update is called once per frame.
void Update()
{

}
}

Dener misiniz?
 
"Argument 1: cannot convert from 'AnswerData[]' to 'AnswerData'"
şöyle bir sorun çıktı.

bu metodu değiştir
C#:
private void ShowQuestion()
{
    RemoveAnswerButtons();
    QuestionData questionData = questionPool[questionIndex];
    questionDisplayText.text = questionData.questionText;

    for (int i = 0; i < questionData.answers.Length; i++)
    {
        GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();
        answerButtonGameObjects.Add(answerButtonGameObject);
        answerButtonGameObject.transform.SetParent(answerButtonParent);

        AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
        answerButton.Setup(questionData.answers[i]);
    }
}
 
bu metodu değiştir
C#:
private void ShowQuestion()
{
    RemoveAnswerButtons();
    QuestionData questionData = questionPool[questionIndex];
    questionDisplayText.text = questionData.questionText;

    for (int i = 0; i < questionData.answers.Length; i++)
    {
        GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();
        answerButtonGameObjects.Add(answerButtonGameObject);
        answerButtonGameObject.transform.SetParent(answerButtonParent);

        AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
        answerButton.Setup(questionData.answers[i]);
    }
}
Sorun düzelmedi
 
Sorun düzelmedi.

C#:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using TMPro;
using Random = UnityEngine.Random;
public class GameController : MonoBehaviour.
{

public TextMeshProUGUI questionDisplayText;
public TextMeshProUGUI scoreDisplayText;
public SimpleObjectPool answerButtonObjectPool;
public Transform answerButtonParent;
public GameObject questionDisplay;

private DataController dataController;
private RoundData currentRoundData;
private QuestionData[] questionPool;

private bool isRoundActive;
private int questionIndex;
private int playerScore;
private List<GameObject> answerButtonGameObjects = new List<GameObject>();

// Use this for initialization.
void Start()
{
dataController = FindObjectOfType<DataController>();
currentRoundData = dataController.GetCurrentRoundData();
questionPool = currentRoundData.questions;

playerScore = 0;
questionIndex = Random.Range(0, 2);
ShowQuestion();
isRoundActive = true;

}

private void ShowQuestion()
{
RemoveAnswerButtons();
QuestionData questionData = questionPool[questionIndex];
questionDisplayText.text = questionData.questionText;

for (int i = 0; i < questionData.questionAnswers.Length; i++)
{
GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();
answerButtonGameObjects.Add(answerButtonGameObject);
answerButtonGameObject.transform.SetParent(answerButtonParent);

AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
answerButton.Setup(questionData.questionAnswers[i]);
}
}

private void RemoveAnswerButtons()
{
while (answerButtonGameObjects.Count > 0)
{
answerButtonObjectPool.ReturnObject(answerButtonGameObjects[0]);
answerButtonGameObjects.RemoveAt(0);
}
}

public void AnswerButtonClicked(bool isCorrect)
{

playerScore += currentRoundData.pointsAddedForCorrectAnswer;
scoreDisplayText.text = "Score: " + playerScore.ToString();

questionIndex++;
ShowQuestion();

}

// Update is called once per frame.
void Update()
{

}
}

Bunu deneyin.
 

Technopat Haberler

Yeni konular

Geri
Yukarı