前提・実現したいこと
ランダムに出題され、重複しない4択クイズを作成したいと考えています。
sceneは、「タイトル画面」「ゲーム画面」「リザルト画面」「結果画面」の4つで構成しています。
「ゲーム画面」では4択問題が出題され、押したボタンに対応する「リザルト画面」に移動し、
指定した回数を終えるまでは、「ゲーム画面」「リザルト画面」が交互に入れ替わります。
問題内容は、csvファイルから読み込むようにしており、
StartメソッドにGuid.NewGuid()を利用して、ランダムなリストを作成し、それをテキストに反映しています。
しかし、「ゲーム画面」「リザルト画面」を移動すると再度リストが作成されてしまう為、問題が重複してしまう状態です。
startメソッドに書いているから、
移動の度に再度リスト作成されてしまっているのが原因なのはわかってはいるのですが、
他の方法を思いつかず悩んでいます。
sceneを移動させているのがそもそも間違いでしょうか?
それともこの4つのシーンでも実現する方法がありますでしょうか?
考え方のご教授をいただければ幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Windows 10
Unity 2020.1.6f1 (64-bit)
追記
i_zna様の回答を参考に試行錯誤してみましたが、未だに行き詰ってしまっています。
教えていただいた通り、/問題生成処理/部分を挟むことでシーンが切り替わっても再度リストを作成しなくはなりましたが、テキストの変更部分まで実行されなくなった為、現在は問題表示の部分で悩んでいます。
ソースがない為、アドバイスしてくれようにも分からないと思いましたので、下記にソースも載せます。
また、sceneを移動するのではなくSubsceneとして「Result」画面を表示することで解決出来ないかと考えているのですが。
考え方として推奨出来るものでしょうか。
独学でやっている為、こういったプログラムの場合、一般的にどの様に作成するものなのかも可能であればお聞きしたいです。
C#
1using System.Collections.Generic; 2using UnityEngine; 3using System.IO; 4using UnityEngine.UI; 5using System.Collections; 6using System; 7using System.Linq; 8 9public class CSVReader : MonoBehaviour 10{ 11 public TextAsset csvFile;// CSVファイル 12 public Text QuizText;//クイズを表示するテキスト 13 public Text Choices1Text;//選択肢1を表示するテキスト 14 public Text Choices2Text;//選択肢2を表示するテキスト 15 public Text Choices3Text;//選択肢3を表示するテキスト 16 public Text Choices4Text;//選択肢4を表示するテキスト 17 public Text AnserText;//自分の答えを表示するテキスト 18 public Text correctText;//正解を表示するテキスト 19 20 21 public static int s = 0; 22 List<string[]> csvDatas = new List<string[]>(); // CSVの中身を入れるリスト; 23 static bool seiseizumi = false; 24 void Start() 25 { 26 //Random(); 27 if (seiseizumi) return; 28 29//-----------------↓csvファイルを読み込む---------------------------- 30 StringReader reader = new StringReader(csvFile.text); 31 while (reader.Peek() != -1) // reader.Peaekが-1になるまで 32 { 33 string line = reader.ReadLine(); // 一行ずつ読み込み 34 csvDatas.Add(line.Split(',')); // , 区切りでリストに追加 35 } 36//-----------------↑csvファイルを読み込む---------------------------- 37//-----------------↓ランダムで重複しないリスト作成---------------------------- 38 List<int> List1 = Enumerable.Range(0, csvDatas.Count) 39 40 .OrderBy(x => System.Guid.NewGuid()) //ランダムで並び替え 41 42 .Take(csvDatas.Count) 43 44 .ToList(); 45//-----------------↑ランダムで重複しないリスト作成---------------------------- 46 47//-----------------↓UIテキストに反映---------------------------- 48 QuizText.text = csvDatas[List1[s]][0]; 49 Choices1Text.text = csvDatas[List1[s]][1]; 50 Choices2Text.text = csvDatas[List1[s]][2]; 51 Choices3Text.text = csvDatas[List1[s]][3]; 52 Choices4Text.text = csvDatas[List1[s]][4]; 53 correctText.text = csvDatas[List1[s]][5]; 54//-----------------↑UIテキストに反映---------------------------- 55 seiseizumi = true; 56 57 } 58}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/21 17:16
2020/09/22 05:43