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 shgdi · Nov 12, 2018 at 12:06 PM · c#unity 5randomrandom.rangeremoveat

How can I randomly create a number and then delete it to stop repeating

I am trying to create some code that randomly picks from 1 to 5 so it would come up with a result from 1 to 4 and once its randomly picked/generated I want to delete from the list therefore disabling repeating. Here is the code I have and the error I receive (Argument is out of range)

 public class GameManager2 : MonoBehaviour
 {
 
     public GameObject Question1, Question2, Question3;
    
     List<int> list = new List<int>();
     private int i, index;
 
     void Start ()
     {
         for (int n = 1; n < 5; n++)
         {
             list.Add(n);
 
         }
 
         CheckQuestion();
     }
     
 
     void Update ()
     {
         if (Input.GetKeyDown(KeyCode.UpArrow))
         {
             CheckQuestion();
         }
 
         if  (i == 1)
         {
            Question1.SetActive(true);
            Question2.SetActive(false);
            Question3.SetActive(false);
            
           
 
         }
        
 
         if (i == 2)
         {
             Question2.SetActive(true);
             Question1.SetActive(false);
             Question3.SetActive(false);
            
 
         }
 
         if (i == 3)
         {
             Question3.SetActive(true);
             Question1.SetActive(false);
             Question2.SetActive(false);
            
 
         }
 
     }
 
     void CheckQuestion()
     {
 
         index = Random.Range(0, list.Count - 1);
         i = list[index];
         Debug.Log(i);
         list.RemoveAt(index);
 
     }

 
Comment
Add comment
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

3 Replies

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by Vega4Life · Nov 16, 2018 at 03:54 PM

Here is something I quickly made - Just link your question objects into the list:


 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 
 public class Questions : MonoBehaviour
 {
     [SerializeField] List<GameObject> questionObjects;
 
     List<GameObject> questionCopies;
     GameObject currentQuestion;
 
 
     void Awake()
     {
         questionCopies = new List<GameObject>(questionObjects);
         HideAllQuestions();
     }
 
 
     void Update()
     {
         if (Input.GetKeyDown(KeyCode.UpArrow))
         {
             GetQuestion();
         }
     }
 
 
     void GetQuestion()
     {
         // If we have questions, show one - if not, hide them all
         if (questionCopies.Count > 0)
         {
             GameObject newQuestion = questionCopies[Random.Range(0, questionCopies.Count)];
             DisplayQuestion(newQuestion);
 
             // Save the new current
             currentQuestion = newQuestion;
 
             // Remove so we don't get it again
             questionCopies.Remove(currentQuestion);
         }
         else
         {
             HideCurrentQuestion();
         }
     }
 
 
     void DisplayQuestion(GameObject question)
     {
         // Hide them all
         HideCurrentQuestion();
 
         // Show the new one
         question.SetActive(true);
     }
 
 
     void HideCurrentQuestion()
     {
         if (currentQuestion != null)
         {
             currentQuestion.SetActive(false);
         }
     }
 
     
     /// <summary>
     /// Turn them off in case they were on in the editor
     /// </summary>
     void HideAllQuestions()
     {
         for (int i = 0; i < questionCopies.Count; i++)
         {
             questionCopies[i].SetActive(false);
         }
     }
 }

Comment
Add comment · Show 5 · Share
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 shgdi · Nov 16, 2018 at 04:06 PM 0
Share

This code to what I can see does not remove the question that has already appeared once. What I need to have is to activate my gameobject only once and then have that gameobject removed from the list to prevent any questions appearing two times or more

avatar image Vega4Life shgdi · Nov 16, 2018 at 04:11 PM 0
Share

With this code, a question will only appear once. The question that is selected gets removed from questionsCopies, thus can never show again.

avatar image shgdi Vega4Life · Nov 16, 2018 at 04:14 PM 0
Share

Hey sorry turned out I had not replace the gameobjects from the list thus duplicates. Sorry for the doubt.

Show more comments
avatar image
0

Answer by UnityCoach · Nov 12, 2018 at 12:27 PM

There's a bit of confusion I guess with your values starting at 1, but indices starting at 0.

int Random.Range() never returns the max value, so if you List contains 1, 2, 3, 4, and you want a random number from that list, you can use this :

 index = Random.Range(0, list.Count);

Which will return a value between 0 and 3, mapping to the table containing 1 to 4.

Otherwise, Count -1 will eventually return -1 when the list is empty, hence your issue I guess.

Also, it's unrelated, but you can save yourself some complexity with the if statements by simply doing this :

 Question1.SetActive(i == 1);
 Question2.SetActive(i == 2);
 Question3.SetActive(i == 3);

Hope this helps.

Comment
Add comment · Show 1 · Share
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 UnityCoach · Nov 12, 2018 at 12:29 PM 0
Share

Forgot to mention, you want to take the SetActive() out of Update(), you can do it from CheckQuestion so that it doesn't trigger every frame.

avatar image
0

Answer by Hellium · Nov 12, 2018 at 12:30 PM

 public GameObject[] Questions;
 private List<int> QuestionIndices ;
 
 void Start ()
 {
     if( Questions.Length == 0 )
     {
         Debug.LogError("No question provided!");
         enabled = false ;
         return ;
     }
     PickQuestion( PickQuestionIndex() );
 }
 
 void Update ()
 {
     if (Input.GetKeyDown(KeyCode.UpArrow))
     {
         PickQuestion( PickQuestionIndex() );
     }
 }
 
 private void FillQuestionIndices()
 {
     if( QuestionIndices == null )
         QuestionIndices = new List<int>(Questions.Length);
 
     for( int i = 0 ; i < Questions.Length ; ++i )
         QuestionIndices.Add( i ) ;
 }
 
 private void PickQuestion( int questionIndex )
 {
     for( int i = 0 ; i < Questions.Length ; ++i )
         Questions[i].SetActive( false ) ;
     
     if( questionIndex >= 0 && questionIndex && < Questions.Length )
         Questions[questionIndex].SetActive( true ) ;
 }
 
 private int PickQuestionIndex()
 {    
     if( QuestionIndices.Count == 0 )
         FillQuestionIndices();
 
     int listIndex = Random.Range(0, QuestionIndices.Count) ;
     int questionIndex = QuestionIndices[listIndex];
     QuestionIndices.RemoveAt(listIndex);
     return questionIndex ;
 }
Comment
Add comment · Show 4 · Share
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 shgdi · Nov 16, 2018 at 03:23 PM 0
Share

I tried your code but the lines : QuestionIndices[questionIndex].SetActive(true); int listIndex = Random.Range(0, list.Count); list.RemoveAt(listIndex); They show up as not correct can you please explain why ?

avatar image Hellium shgdi · Nov 16, 2018 at 03:33 PM 0
Share

What do you mean by "they show up as not correct"? Do you have any error in the console?

avatar image shgdi Hellium · Nov 16, 2018 at 03:53 PM 0
Share

alt text

capture.png (20.2 kB)
Show more comments

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

592 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to make enemy prefab spawn at random times between 1.0f to 10.0f. 1 Answer

Script sets color to multiple objects from instead of only one object with Random.range() 0 Answers

How to instantiate prefabs at random postions in 2d 1 Answer

Random.Range is the same in each object with the script 0 Answers

Semi-Random Or Engine 1 Answer


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