回答編集履歴

1

追記

2025/06/06 13:06

投稿

YAmaGNZ
YAmaGNZ

スコア10592

test CHANGED
@@ -18,3 +18,101 @@
18
18
  なのでシーンを問題数分作るとかPrefab化するなどしなくてもいいかと思います。
19
19
 
20
20
  このあたりは普通のクイズの作成を解説しているようなページで解説してそうです。
21
+
22
+
23
+ ### 追記
24
+ ちょっと理解されていないようなので具体的な例を
25
+ まずResourcesフォルダにquestions.csvというCSVを用意します。
26
+ これは1行で問題1問分の情報を示し
27
+ 問題曲,回答1,回答2,回答3,回答4,回答5
28
+ といったフォーマットとしています。
29
+
30
+ 中身は例えば以下のようにします。
31
+ ```csv
32
+ music1,ans1-1,ans1-2,ans1-3,ans1-4,ans1-5
33
+ music2,ans2-1,ans2-2,ans2-3,ans2-4,ans2-5
34
+ music3,ans3-1,ans3-2,ans3-3,ans3-4,ans3-5
35
+ music4,ans4-1,ans4-2,ans4-3,ans4-4,ans4-5
36
+ music5,ans5-1,ans5-2,ans5-3,ans5-4,ans5-5
37
+ music6,ans6-1,ans6-2,ans6-3,ans6-4,ans6-5
38
+ music7,ans7-1,ans7-2,ans7-3,ans7-4,ans7-5
39
+ music8,ans8-1,ans8-2,ans8-3,ans8-4,ans8-5
40
+ music9,ans9-1,ans9-2,ans9-3,ans9-4,ans9-5
41
+ music10,ans10-1,ans10-2,ans10-3,ans10-4,ans10-5
42
+ ```
43
+ そして、Resourcesフォルダの中にmusicフォルダを作りその中に問題となる音楽ファイルを入れます。
44
+ そこに追加したものの名前はmusic1~music10とします。
45
+
46
+ これで10問分の問題データが作成できました。
47
+
48
+
49
+ そしてスクリプトでは
50
+ ```C#
51
+ class question
52
+ {
53
+ public string musicname;
54
+ public List<string> ans;
55
+ }
56
+ ```
57
+ と問題1問分の情報を格納するクラスを定義します。
58
+ そして
59
+ List<question> questionList = new List<question>();
60
+ といった問題が格納されるリストを定義して
61
+ ```C#
62
+ // Resourcesからquestions.csvを読み込む
63
+ TextAsset csvFile = Resources.Load("questions") as TextAsset; /* CSV読み込み */
64
+ StringReader reader = new StringReader(csvFile.text);
65
+
66
+ // 最後まで読み込む
67
+ while (reader.Peek() > -1)
68
+ {
69
+ // 1行読み込む
70
+ string line = reader.ReadLine();
71
+ // 読み込んだ行をカンマで区切る
72
+ string[] datas = line.Split(',');
73
+
74
+ // 読み込んだデータより1問分の情報クラスを作成する
75
+ question q = new question() { musicname = datas[0],ans = new List<string>(new string[] { datas[1], datas[2], datas[3], datas[4], datas[5] })};
76
+ // 問題Listに追加する
77
+ questionList.Add(q);
78
+ }
79
+ ```
80
+ このような感じでCSVを読み込みます。
81
+ これでCSVの内容が問題Listとして保持されます。CSVですから100問だろうが行を増やせばいくらでも問題が増やせます。
82
+
83
+ そして
84
+ ```C#
85
+ void QuestionView(int index)
86
+ {
87
+ // 前の曲の解放
88
+ AudioClip before = audioSource.clip;
89
+ audioSource.clip = null;
90
+ before?.UnloadAudioData();
91
+
92
+ // 音楽の読み込み
93
+ AudioClip music = Resources.Load($"music/{questionList[index].musicname}") as AudioClip;
94
+
95
+ // 回答するためのボタンに回答文字列をセット
96
+
97
+ // 問題の音楽を再生
98
+ audioSource.clip = music;
99
+ audioSource.Play();
100
+
101
+ }
102
+ ```
103
+ といった感じで関数を用意すれば
104
+ QuestionView(9);
105
+ と指定のindexの問題の準備ができます。
106
+ 現在出題中の問題は
107
+ Question nowquestion;
108
+ といった感じで変数を用意して
109
+ nowquestion = questionList[9];
110
+ と格納しておけばいいでしょう。そうすれば正解判断などもやりやすいかと思います。
111
+
112
+ あくまで考え方の説明なので正解判断をどうするのかなどの説明はしません。
113
+ CSVに選択肢だけではなく正解情報も格納しておいて正解判断できるようにするなどすればいいでしょう。
114
+
115
+ また音楽ファイルもmusic1といった名前ではなく具体的な曲の名前としてもいいでしょう。ようはCSVの情報とResources/musicフォルダの中の名前が一致すればいいので
116
+
117
+ あくまで「問題数がとても多いクイズを作るにあたって最適な方法が知りたい」という質問に対する回答となります。
118
+ これでイメージが湧きますでしょうか?