回答編集履歴

3

もう一度修正です。すみません

2020/09/22 04:42

投稿

i_zna
i_zna

スコア198

test CHANGED
@@ -92,12 +92,6 @@
92
92
 
93
93
  void Start(){
94
94
 
95
- if(takeQuizCount > csvDatas.Count){
96
-
97
- Debug.LogError("出題数が問題数より多いようです。");
98
-
99
- }
100
-
101
95
 
102
96
 
103
97
  //csvデータが空の場合読み込む (一度だけ実行されます)
@@ -117,6 +111,14 @@
117
111
  MakeQuizIndexList();
118
112
 
119
113
  currentQuizIndexIndex = 0;
114
+
115
+ }
116
+
117
+
118
+
119
+ if(takeQuizCount > csvDatas.Count){
120
+
121
+ Debug.LogError("出題数が問題数より多いようです。");
120
122
 
121
123
  }
122
124
 

2

実験の名残が残ってました

2020/09/22 04:42

投稿

i_zna
i_zna

スコア198

test CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
 
92
92
 
93
- public void Start(){
93
+ void Start(){
94
94
 
95
95
  if(takeQuizCount > csvDatas.Count){
96
96
 

1

追記

2020/09/22 04:40

投稿

i_zna
i_zna

スコア198

test CHANGED
@@ -22,4 +22,166 @@
22
22
 
23
23
  }
24
24
 
25
+ ```---追記---
26
+
27
+
28
+
29
+ ソースを拝見しました。出題のたびにリストを生成するのでは結局確率で問題が重複してしまうと思いましたので、1ゲームの出題数ごとにリストを生成するように修正してみました。
30
+
31
+
32
+
33
+ 私もUnityは素人なのでどういう風に書くのが正解かというのは解りません。ただ、シーン管理についてはメモリの問題やヒエラルキーが込み入るのを防ぐものでしょうから、個人制作のクイズアプリの規模であれば楽だと思う方法で構わないのではないでしょうか。
34
+
35
+
36
+
37
+ (ただ個人的には、「ゲーム画面」「リザルト画面」は統合したほうがやりやすいのではないかと思います。)
38
+
39
+ ```C#
40
+
41
+ using System.Collections.Generic;
42
+
43
+ using UnityEngine;
44
+
45
+ using System.IO;
46
+
47
+ using UnityEngine.UI;
48
+
49
+ using System.Collections;
50
+
51
+ using System;
52
+
53
+ using System.Linq;
54
+
55
+ using UnityEditor;
56
+
57
+
58
+
59
+ public class CSVReader : MonoBehaviour
60
+
61
+ {
62
+
63
+ public int takeQuizCount = 5; //出題数
64
+
65
+
66
+
67
+ public TextAsset csvFile;// CSVファイル
68
+
69
+ public Text QuizText;//クイズを表示するテキスト
70
+
71
+ public Text Choices1Text;//選択肢1を表示するテキスト
72
+
73
+ public Text Choices2Text;//選択肢2を表示するテキスト
74
+
75
+ public Text Choices3Text;//選択肢3を表示するテキスト
76
+
77
+ public Text Choices4Text;//選択肢4を表示するテキスト
78
+
79
+ public Text AnserText;//自分の答えを表示するテキスト
80
+
81
+ public Text correctText;//正解を表示するテキスト
82
+
83
+
84
+
85
+ static List<string[]> csvDatas = null; //CSVの中身を入れるリスト
86
+
87
+ static List<int> quizIndexList = null; //クイズ番号のリスト
88
+
89
+ static int currentQuizIndexIndex = 0; //次に出題するクイズ番号のインデックス
90
+
91
+
92
+
93
+ public void Start(){
94
+
95
+ if(takeQuizCount > csvDatas.Count){
96
+
97
+ Debug.LogError("出題数が問題数より多いようです。");
98
+
99
+ }
100
+
101
+
102
+
103
+ //csvデータが空の場合読み込む (一度だけ実行されます)
104
+
105
+ if (csvDatas == null){
106
+
107
+ LoadCSVDatas();
108
+
109
+ }
110
+
111
+
112
+
113
+ //リストがないとき、出題数をオーバーしたときにリストを生成
114
+
115
+ if(quizIndexList == null || currentQuizIndexIndex >= takeQuizCount){
116
+
117
+ MakeQuizIndexList();
118
+
119
+ currentQuizIndexIndex = 0;
120
+
121
+ }
122
+
123
+
124
+
125
+ //クイズをUIに表示
126
+
127
+ ShowQuiz(currentQuizIndexIndex);
128
+
129
+ currentQuizIndexIndex ++;
130
+
131
+ }
132
+
133
+
134
+
135
+ void LoadCSVDatas(){
136
+
137
+ csvDatas = new List<string[]>();
138
+
139
+ StringReader reader = new StringReader(csvFile.text);
140
+
141
+ while (reader.Peek() != -1)
142
+
143
+ {
144
+
145
+ string line = reader.ReadLine();
146
+
147
+ csvDatas.Add(line.Split(','));
148
+
149
+ }
150
+
151
+ }
152
+
153
+
154
+
155
+ void MakeQuizIndexList(){
156
+
157
+ quizIndexList = Enumerable.Range(0, csvDatas.Count)
158
+
159
+ .OrderBy(x => System.Guid.NewGuid())
160
+
161
+ .Take(csvDatas.Count)
162
+
163
+ .ToList();
164
+
165
+ }
166
+
167
+
168
+
169
+ void ShowQuiz(int index){
170
+
171
+ QuizText.text = csvDatas[quizIndexList[index]][0];
172
+
173
+ Choices1Text.text = csvDatas[quizIndexList[index]][1];
174
+
175
+ Choices2Text.text = csvDatas[quizIndexList[index]][2];
176
+
177
+ Choices3Text.text = csvDatas[quizIndexList[index]][3];
178
+
179
+ Choices4Text.text = csvDatas[quizIndexList[index]][4];
180
+
181
+ correctText.text = csvDatas[quizIndexList[index]][5];
182
+
183
+ }
184
+
185
+ }
186
+
25
187
  ```