csvを使ってクイズづくりに挑戦しているのですがなかなかcsvの値を取り出すことができず困っています。 本当はうまく作動してたのですがセーブを忘れて変なところからロードしてからバグりました。
######ちなみに、csvを読み込む方法などは こちらのこんぶさんのを参考にしています。 unityのバージョンは2019.3.3f1です。
#エラーコード
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
(google先生による和訳:ArgumentOutOfRangeException:インデックスが範囲外でした。 負ではなく、コレクションのサイズより小さくなければなりません。)
__ Question Reader .csのmakeQuestion.answer = (questionDatas[1][2]);
という場所で発生しています。__
###MakeQuestion.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class MakeQuestion : MonoBehaviour 7{ 8 public Text numbertext; 9 public Text questiontext; 10 public Text answerbuttonchoices1; 11 public Text answerbuttonchoices2; 12 public Text answerbuttonchoices3; 13 14 public GameObject answerCheck; 15 public GameObject questionReader; 16 17 int max_questionnumber = 2; 18 public int questionnumber = 0; 19 public List<string> choices = new List<string>(); 20 public string answer; 21 22 // Start is called before the first frame update 23 void Start() 24 { 25 nextqusetion(); 26 } 27 28 // Update is called once per frame 29 void Update() 30 { 31 32 } 33 34 void choicesrandom() 35 { 36 int randomnumber; 37 string randomi; 38 choices.Clear(); 39 40 QuestionReader questionReader = GetComponent<QuestionReader>(); 41 questionReader.randomdata(); 42 43 for (int i = 0; i < choices.Count; i++) 44 { 45 randomi = choices[i]; 46 randomnumber = Random.Range(0, choices.Count); 47 choices[i] = choices[randomnumber]; 48 choices[randomnumber] = randomi; 49 } 50 51 randomi = choices[choices.IndexOf(answer)]; 52 randomnumber = Random.Range(0, 3); 53 choices[choices.IndexOf(answer)] = choices[randomnumber]; 54 choices[randomnumber] = randomi; 55 randomnumber++; 56 answerCheck.GetComponent<AnswerCheck>().answer = randomnumber; 57 } 58 59 public void nextqusetion() 60 { 61 if (questionnumber != max_questionnumber) 62 { 63 questionnumber++; 64 choicesrandom(); 65 choices.Add(questionReader.GetComponent<QuestionReader>().questionDatas[questionnumber][1]); 66 choices.Add(questionnumber + "/" + max_questionnumber + "問 " + questionReader.GetComponent<QuestionReader>().questionDatas[questionnumber][0]); 67 questiontext.text = choices[5]; 68 numbertext.text = choices[6]; 69 answerbuttonchoices1.text = choices[0]; 70 answerbuttonchoices2.text = choices[1]; 71 answerbuttonchoices3.text = choices[2]; 72 } 73 74 } 75}
###QuestionReader.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.IO; 5 6public class QuestionReader : MonoBehaviour 7{ 8 public List<string[]> questionDatas = new List<string[]>(); //CSVデータ保存リスト 9 10 // Start is called before the first frame update 11 void Start() 12 { 13 //読み込み 14 TextAsset questionCSV = Resources.Load("Question") as TextAsset; 15 StringReader reader = new StringReader(questionCSV.text); 16 17 //リストにCSVデータを入れる 18 while(reader.Peek() != -1) 19 { 20 string data = reader.ReadLine(); //一行ずつ読み込む 21 questionDatas.Add(data.Split(',')); //,ごとに分けてリストに入れる 22 } 23 24 //questionDatas[行][列] 25 26 print(questionDatas[2][2]); //ここだけなぜか反応する なぜだ..... 27 28 } 29 30 // Update is called once per frame 31 void Update() 32 { 33 34 } 35 36 public void randomdata() 37 { 38 MakeQuestion makeQuestion = GetComponent<MakeQuestion>(); 39 makeQuestion.answer = (questionDatas[1][2]); 40 makeQuestion.choices.Add(makeQuestion.answer); 41 makeQuestion.choices.Add(questionDatas[makeQuestion.questionnumber][3]); 42 makeQuestion.choices.Add(questionDatas[makeQuestion.questionnumber][4]); 43 makeQuestion.choices.Add(questionDatas[makeQuestion.questionnumber][5]); 44 makeQuestion.choices.Add(questionDatas[makeQuestion.questionnumber][6]); 45 } 46} 47
#検討したこと
- CSVの値を取り出す場所を変えてみた。(MakeQuestionもQuestionReaderも試したがQuestionReaderのStartしか反応しない)
Googleですごい調べた。
回答2件
あなたの回答
tips
プレビュー