Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 Uping · Feb 17, 2014 at 12:55 PM · arrayarrayshow-toworkingargument

my QandA array is not working when you choose 3 wrong answers

okay my problem is when i have 3 wrong answers and 1 correct the program will stop saying argument is out of range and i dont know why but when i only choose the correct answers its working well so here's the code and thank you in advance

 public class wawa : MonoBehaviour {
     private bool Poop;
     public string Info;
 
     private List<string[]> questions  = new List<string[]>();
     private List<int> answerOrder = new List<int>(new int[] {1,2,3,4});
 
     void DrawInfo() {
         Rect rect = new Rect(500, 100, 400, 200);
         Rect close = new Rect(600, 500, 200, 100);
         if(GUI.Button(close, "ATTACK")) {
             Poop = !Poop;
         }
 
         if (Poop) {
             GUI.Box(rect, Info);
             GUI.Label(new Rect(520, 110, 400, 30), questions[0][0]);
             if (GUI.Button(new Rect(520, 200, 100, 30), questions[0][answerOrder[0]])) {
                 HandleAnswer(answerOrder[0]);
             }
             if (GUI.Button(new Rect(520, 250, 100, 30), questions[0][answerOrder[1]])) {
                 HandleAnswer(answerOrder[1]);
             }
             if (GUI.Button(new Rect(780, 200, 100, 30), questions[0][answerOrder[2]])) {
                 HandleAnswer(answerOrder[2]);
             }
             if (GUI.Button(new Rect(780, 250, 100, 30), questions[0][answerOrder[3]])) {
                 HandleAnswer(answerOrder[3]);
             }
         }
     }
 
     private void HandleAnswer(int answer) {
         if (answer == 1) {
             
             NextQuestion();
         }
         else {
           
         }
     }
 
     void OnGUI() {
       
         if(questions.Count > 0) {
             DrawInfo();
         }
     }
 
     void Start() {
         // String order: question, correct, wrong, wrong, wrong
         questions.Add(new string[] { "What in the capital of France?", "Paris", "New York", "London", "Madrid" });
         questions.Add(new string[] { "Which of these is an amphibian?", "Frog", "Shark", "Lizard", "Hawk" });
         questions.Add(new string[] { "Which of these is an planet?", "Neptune", "Thor", "Pegasus", "Hera" });
     questions.Add(new string[] { "Which of these is smallest planet?", "Pluto", "Thor", "Pegasus", "Hera" });
 questions.Add(new string[] { "What in the capital of Philippines?", "Manila", " Las Pinas", "Makati", "Bulacan" });
         Shuffle(questions);
         Shuffle(answerOrder);
     }
 
     void NextQuestion() {
         questions.RemoveAt(0);
         Shuffle(answerOrder);
     }
 
    
     static readonly System.Random rng = new System.Random();
     public static void Shuffle<T>(IList<T> list) {
         int n = list.Count;
         while(n > 1) {
             n--;
             int k = rng.Next(n + 1);
             T value = list[k];
             list[k] = list[n];
             list[n] = value;
         }
     }
 }
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 Bunny83 · Feb 17, 2014 at 02:07 PM 0
Share

Duplicate:
http://answers.unity3d.com/questions/641707/array-problem-index-out-of-range-why-.html

Please don't post the same question multiple times. You should react to the answers you got and wait for a reply. If you have new information, either edit the question or add a comment to your question.

avatar image Uping · Feb 17, 2014 at 02:49 PM 0
Share

okay sorry

1 Reply

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

Answer by Berenger · Feb 17, 2014 at 01:21 PM

When you answer the last question, the list questions becomes empty DURING the GUI loop. If the answer is the second one, you'll get an error for the third one because questions is empty. Either check if questions is empty for each button, or empty it at another time.

Comment
Add comment · Show 3 · 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 Uping · Feb 17, 2014 at 01:31 PM 0
Share

im really sory im really new at scripting but how can i fix this please help me im out of idea ive been fixing this for days for my thesis project

avatar image Bunny83 · Feb 17, 2014 at 01:52 PM 0
Share

+1

You could add this line at the end of your "NextQuestion" method:

     GUIUtility.ExitGUI();

It will immediately ter$$anonymous$$ate the current OnGUI iteration, flush the layout buffer and start over next frame.

Another way could be to add a local int variable inside DrawInfo method just before you draw the first button and set it to 0. Then each button just sets the variable of the choosen answer and at the very end of OnGUI you check if your variable is greater than 0 (since your answers are 1,2,3,4).

Something like this:

 void DrawInfo()
 {
     // [...]
     int answer = 0;
 
     if (GUI.Button(new Rect(520, 200, 100, 30), questions[0][answerOrder[0]])) {
         answer = answerOrder[0];
     }
     // [...]
     if (answer > 0)
         HandleAnswer(answer);
 }
avatar image Uping · Feb 17, 2014 at 02:40 PM 0
Share

thankyou very much sir you solved it, and you really help me thankyou

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

20 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

Related Questions

Making objects follow each other in a line, and objects ignoring minimum follow distance. 2 Answers

How to merge an arrays into arrays inside an array? 3 Answers

adding classes to arrays 2 Answers

Array of variable-length arrays (JS) 1 Answer

How To Get A Reference To All Nearby GameObjects? 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