Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by kimi81 · Jan 16, 2017 at 01:42 PM · quiz

How to randomize non-repaeting question?

Hi, I`m making a quiz game following official live training tutorial and I would like to set it up so that the questions are showing up randomly in that way that they are not repeating in the currentRound of quiz. I saw in comments of that tutorial that author said we could use Shuffle bag technique but that is a little bit too complicated to implement. Is there any other simpler way to do it? Here`s a script from that tutorial that contains ShowQuestion method:

 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.SceneManagement;
 using System.Collections.Generic;
 
 public class GameController : MonoBehaviour
 {
     public SimpleObjectPool answerButtonObjectPool;
     public Text questionText;
     public Text scoreDisplay;
     public Text timeRemainingDisplay;
     public Transform answerButtonParent;
 
     public GameObject questionDisplay;
     public GameObject roundEndDisplay;
     public Text highScoreDisplay;
 
     private DataController dataController;
     private RoundData currentRoundData;
     private QuestionData[] questionPool;
 
     private bool isRoundActive = false;
     private float timeRemaining;
     private int playerScore;
     private int questionIndex;
     private List<GameObject> answerButtonGameObjects = new List<GameObject>();
 
     void Start()
     {
         dataController = FindObjectOfType<DataController>();                                // Store a reference to the DataController so we can request the data we need for this round
 
         currentRoundData = dataController.GetCurrentRoundData();                            // Ask the DataController for the data for the current round. At the moment, we only have one round - but we could extend this
         questionPool = currentRoundData.questions;                                            // Take a copy of the questions so we could shuffle the pool or drop questions from it without affecting the original RoundData object
 
         timeRemaining = currentRoundData.timeLimitInSeconds;                                // Set the time limit for this round based on the RoundData object
         UpdateTimeRemainingDisplay();
         playerScore = 0;
         questionIndex = 0;
 
         ShowQuestion();
         isRoundActive = true;
     }
 
     void Update()
     {
         if (isRoundActive)
         {
             timeRemaining -= Time.deltaTime;                                                // If the round is active, subtract the time since Update() was last called from timeRemaining
             UpdateTimeRemainingDisplay();
 
             if (timeRemaining <= 0f)                                                        // If timeRemaining is 0 or less, the round ends
             {
                 EndRound();
             }
         }
     }
 
     void ShowQuestion()
     {
         RemoveAnswerButtons();
 
         QuestionData questionData = questionPool[questionIndex];                            // Get the QuestionData for the current question
         questionText.text = questionData.questionText;                                        // Update questionText with the correct text
 
         for (int i = 0; i < questionData.answers.Length; i ++)                                // For every AnswerData in the current QuestionData...
         {
             GameObject answerButtonGameObject = answerButtonObjectPool.GetObject();            // Spawn an AnswerButton from the object pool
             answerButtonGameObjects.Add(answerButtonGameObject);
             answerButtonGameObject.transform.SetParent(answerButtonParent);
             answerButtonGameObject.transform.localScale = Vector3.one;
 
             AnswerButton answerButton = answerButtonGameObject.GetComponent<AnswerButton>();
             answerButton.SetUp(questionData.answers[i]);                                    // Pass the AnswerData to the AnswerButton so the AnswerButton knows what text to display and whether it is the correct answer
         }
     }
 
     void RemoveAnswerButtons()
     {
         while (answerButtonGameObjects.Count > 0)                                            // Return all spawned AnswerButtons to the object pool
         {
             answerButtonObjectPool.ReturnObject(answerButtonGameObjects[0]);
             answerButtonGameObjects.RemoveAt(0);
         }
     }
 
     public void AnswerButtonClicked(bool isCorrect)
     {
         if (isCorrect)
         {
             playerScore += currentRoundData.pointsAddedForCorrectAnswer;                    // If the AnswerButton that was clicked was the correct answer, add points
             scoreDisplay.text = playerScore.ToString();
         }
 
         if(questionPool.Length > questionIndex + 1)                                            // If there are more questions, show the next question
         {
             questionIndex++;
             ShowQuestion();
         }
         else                                                                                // If there are no more questions, the round ends
         {
             EndRound();
         }
     }
 
     private void UpdateTimeRemainingDisplay()
     {
         timeRemainingDisplay.text = Mathf.Round(timeRemaining).ToString();
     }
 
     public void EndRound()
     {
         isRoundActive = false;
 
         questionDisplay.SetActive(false);
         roundEndDisplay.SetActive(true);
     }
 
     public void ReturnToMenu()
     {
         SceneManager.LoadScene("MenuScreen");
     }
 }
Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Deepal · Aug 26, 2017 at 11:34 PM 0
Share

currentRoundData = dataController.GetCurrentRoundData();

// Ask the DataController for the data for the current round. At the moment, we only have one round - but we could extend this

I am also working with a similar game code, and need help with the above statement. I want to extend the above line to go to the next round. Can anyone help me with this please.

avatar image $$anonymous$$ · Aug 27, 2017 at 12:56 AM 1
Share

You could make a list and populate it with questions, call a random item and remove it when you're done.

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

random array instance 2 Answers

how to randomize questions but still show all the questions? 1 Answer

ScriptableObject , use Resources.Load sprite then it have error. 0 Answers

Random order questions 0 Answers

How to add images to answers within a quiz game? 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges