実現したいこと
Unityでクイズゲームを作成しています。
現在できていること
CSVファイルを読み込み問題をUIに反映させ、正誤判定、スクリプト間のデータを受け渡してスコアを表示させるというところまででき、クイズゲームとしては完成に近いのですが、問題が重複して出題されてしまい困っております。
発生している問題・分からないこと
QuizMgrというスクリプトを使ってCSVの問題を取得してUIに表示させています。下記補足ソースコードを追加すると問題と答えがバラバラにUIに反映されるようになってしまいました。
該当のソースコード
QuizMgr
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System.IO; 6using System.Linq; 7 8public class QuizMgr : MonoBehaviour 9{ 10 public string dataName; 11 public string title; 12 public TextAsset csvFile; 13 public List<string[]> csvDatas = new List<string[]>(); 14 public int height = 0; 15 public int i, j = 0; 16 public int k = 0; 17 internal Text ansLabel; 18 public string AnswerText; 19 const int size = 5; 20 private static string correctAnswer; 21 22 void Awake() 23 { 24 25 title = "theme_"; 26 csvFile = Resources.Load("CSV/CSVDatas") as TextAsset; 27 StringReader reader = new StringReader(csvFile.text); 28 29 while (reader.Peek() > -1) 30 { 31 string line = reader.ReadLine(); 32 csvDatas.Add(line.Split(',')); 33 Debug.Log("reading:" + height); 34 height++; 35 } 36 37 for (i = 0; i < height; i++) 38 { 39 for (j = 0; j < size; j++) 40 { 41 Debug.Log("csvDatas[" + i + "][" + j + "]:" + csvDatas[i][j]); 42 } 43 } 44 45 QuestionLabelSet(); 46 AnswerLabelSet(); 47 AnswerSet(); 48 } 49 50 51 public void QuestionLabelSet() 52 { 53 csvDatas[k] = csvDatas[Random.Range(0, 10)]; 54 //特定の名前のオブジェクトを検索してアクセス 55 Text qLabel = GameObject.Find("Quiz/QLabel").GetComponentInChildren<Text>(); 56 //データをセットすることで、既存情報を上書きできる 57 qLabel.text = csvDatas[k][0]; 58 } 59 60 public void AnswerLabelSet() 61 { 62 //問題文に対応した答えをそれぞれのuGUIボタンにセット 63 string[] array = new string[] { csvDatas[k][1], csvDatas[k][2], csvDatas[k][3], csvDatas[k][4] }; 64 65 //問題文をシャッフル 66 array = array.OrderBy(x => System.Guid.NewGuid()).ToArray(); 67 68 //ボタンが4つあるのでそれぞれ代入 69 for (int i = 1; i <= 4; i++) 70 { 71 Text ansLabel = GameObject.Find("Quiz/AnsButton" + i).GetComponentInChildren<Text>(); 72 ansLabel.text = array[i - 1]; 73 } 74 } 75 76 public void AnswerSet() 77 { 78 //答えとなるcsvデータを変数として型に代入する 79 AnswerText = csvDatas[k][1]; 80 Debug.Log(AnswerText); 81 82 correctAnswer = csvDatas[k][1]; 83 } 84 85 public static string GetCorrectAnswer() 86 { 87 return correctAnswer; 88 } 89 90 void Update() { } 91}
//追加したもの一覧 public List<string[]> shuffledCsvDatas = new List<string[]>(); shuffledCsvDatas = csvDatas.OrderBy(x => Random.value).ToList(); public void QuestionLabelSet() { // シャッフルしたデータを順番に表示 Text qLabel = GameObject.Find("Quiz/QLabel").GetComponentInChildren<Text>(); qLabel.text = shuffledCsvDatas[k][0]; } public void AnswerSet() { //答えとなるcsvデータを変数として型に代入する AnswerText = shuffledCsvDatas[k][1]; correctAnswer = shuffledCsvDatas[k][1]; }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
問題とクイズのそれぞれがシャッフルされ本来の問題とその答えがバラバラになってしまいました。
補足
特になし

回答1件
あなたの回答
tips
プレビュー