C# 当索引与输入匹配且无重复问题显示时,如何停止随机范围?

C# 当索引与输入匹配且无重复问题显示时,如何停止随机范围?,c#,unity3d,random,C#,Unity3d,Random,在下面的代码中,我有一个数组来存储问题。我想让它在游戏开始时看起来是随机的。使用questionIndex=Random.Range(0,questionPool.Length)已成功执行此操作,但仍存在重复,并且不会根据索引正确停止 void Start() { audioPlayer = gameObject.AddComponent<AudioSource>(); dataController = FindObjectOfType<DataControll

在下面的代码中,我有一个数组来存储问题。我想让它在游戏开始时看起来是随机的。使用
questionIndex=Random.Range(0,questionPool.Length)已成功执行此操作,但仍存在重复,并且不会根据索引正确停止

void Start()
{
    audioPlayer = gameObject.AddComponent<AudioSource>();
    dataController = FindObjectOfType<DataController>();

    currentRoundData = dataController.GetCurrentRoundData();
    questionPool = currentRoundData.questions;

    timeRemaining = currentRoundData.timeLimitInSeconds;
    UpdateTimeRemainingDisplay();
    Time.timeScale = 1f;
    playerScore = 0;
    questionIndex = 0;

    ShowQuestion();
    isRoundActive = true;
}

void ShowQuestion()
{
    RemoveAnswerButtons();

    questionIndex = Random.Range(0, questionPool.Length);
    QuestionData questionData = questionPool[questionIndex];
    questionText.text = questionData.questionText;

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

        AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
        answerButton.SetUp(questionData.answers[i]);
    }
}
void Start()
{
audioPlayer=gameObject.AddComponent();
dataController=FindObjectOfType();
currentRoundData=dataController.GetCurrentRoundData();
questionPool=currentRoundData.questions;
剩余时间=currentRoundData.timeLimitInSeconds;
UpdateTimeRemainingDisplay();
Time.timeScale=1f;
playerScore=0;
问题指数=0;
ShowQuestion();
isRoundActive=true;
}
无效显示问题()
{
移除接听按钮();
questionIndex=Random.Range(0,questionPool.Length);
QuestionData QuestionData=questionPool[questionIndex];
questionText.text=questionData.questionText;
for(int i=0;i
您可以使用以下扩展方法将集合随机化

public static IEnumerable<TSource> Shuffle<TSource>(this IEnumerable<TSource> dataArray)
{
    var dataArrayList = dataArray.ToList();
    var returnValue = Enumerable.Empty<TSource>();
    for (int index = dataArrayList.Count()-1; index > 0; index--)
    {
        var randomKey = _randomGenerator.Next(1, index);
        var temp = dataArrayList[randomKey];
        dataArrayList[randomKey] = dataArrayList[dataArray.Count() - 1];
        dataArrayList[dataArray.Count() - 1] = temp;
    }
    return dataArrayList;
}

我不理解你的问题:“仍然存在重复”和“没有正确停止”。你能提供更多信息吗?什么是重复的,什么是应该停止的并不明显。如果你能描述一下你期望这段代码做什么以及它实际上做了什么是错误的,那会很有帮助。你可能想研究如何洗牌一个集合。你想从集合中挑选一个随机的问题,还是想随机/洗牌整个集合并全部显示出来?@JohnWu我做了一个游戏测试有10个问题。我试着不按顺序随机显示这10个问题。所以我添加了questionIndex=Random.Range(0,questionPool.Length);在我的代码中。从代码成功地使10个问题随机出现。但是当游戏开始时,应该显示10个问题,他在所有问题出现之前就停止了。有时所有的问题都会出现,但问题会持续出现超过10个问题。如何使10个问题随机出现,而不重复问题,并在10个问题完成后完成answered@AnuViswan是的,我想随机化我输入的所有问题,并显示它们。当所有出场的时候,比赛就结束了。
var shuffledQuestionPool = questionPool.Shuffle();