質問するログイン新規登録

回答編集履歴

3

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

2020/09/22 04:42

投稿

i_zna
i_zna

スコア198

answer CHANGED
@@ -45,9 +45,6 @@
45
45
  static int currentQuizIndexIndex = 0; //次に出題するクイズ番号のインデックス
46
46
 
47
47
  void Start(){
48
- if(takeQuizCount > csvDatas.Count){
49
- Debug.LogError("出題数が問題数より多いようです。");
50
- }
51
48
 
52
49
  //csvデータが空の場合読み込む (一度だけ実行されます)
53
50
  if (csvDatas == null){
@@ -59,6 +56,10 @@
59
56
  MakeQuizIndexList();
60
57
  currentQuizIndexIndex = 0;
61
58
  }
59
+
60
+ if(takeQuizCount > csvDatas.Count){
61
+ Debug.LogError("出題数が問題数より多いようです。");
62
+ }
62
63
 
63
64
  //クイズをUIに表示
64
65
  ShowQuiz(currentQuizIndexIndex);

2

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

2020/09/22 04:42

投稿

i_zna
i_zna

スコア198

answer CHANGED
@@ -44,7 +44,7 @@
44
44
  static List<int> quizIndexList = null; //クイズ番号のリスト
45
45
  static int currentQuizIndexIndex = 0; //次に出題するクイズ番号のインデックス
46
46
 
47
- public void Start(){
47
+ void Start(){
48
48
  if(takeQuizCount > csvDatas.Count){
49
49
  Debug.LogError("出題数が問題数より多いようです。");
50
50
  }

1

追記

2020/09/22 04:40

投稿

i_zna
i_zna

スコア198

answer CHANGED
@@ -10,4 +10,85 @@
10
10
 
11
11
  seiseizumi = true;
12
12
  }
13
+ ```---追記---
14
+
15
+ ソースを拝見しました。出題のたびにリストを生成するのでは結局確率で問題が重複してしまうと思いましたので、1ゲームの出題数ごとにリストを生成するように修正してみました。
16
+
17
+ 私もUnityは素人なのでどういう風に書くのが正解かというのは解りません。ただ、シーン管理についてはメモリの問題やヒエラルキーが込み入るのを防ぐものでしょうから、個人制作のクイズアプリの規模であれば楽だと思う方法で構わないのではないでしょうか。
18
+
19
+ (ただ個人的には、「ゲーム画面」「リザルト画面」は統合したほうがやりやすいのではないかと思います。)
20
+ ```C#
21
+ using System.Collections.Generic;
22
+ using UnityEngine;
23
+ using System.IO;
24
+ using UnityEngine.UI;
25
+ using System.Collections;
26
+ using System;
27
+ using System.Linq;
28
+ using UnityEditor;
29
+
30
+ public class CSVReader : MonoBehaviour
31
+ {
32
+ public int takeQuizCount = 5; //出題数
33
+
34
+ public TextAsset csvFile;// CSVファイル
35
+ public Text QuizText;//クイズを表示するテキスト
36
+ public Text Choices1Text;//選択肢1を表示するテキスト
37
+ public Text Choices2Text;//選択肢2を表示するテキスト
38
+ public Text Choices3Text;//選択肢3を表示するテキスト
39
+ public Text Choices4Text;//選択肢4を表示するテキスト
40
+ public Text AnserText;//自分の答えを表示するテキスト
41
+ public Text correctText;//正解を表示するテキスト
42
+
43
+ static List<string[]> csvDatas = null; //CSVの中身を入れるリスト
44
+ static List<int> quizIndexList = null; //クイズ番号のリスト
45
+ static int currentQuizIndexIndex = 0; //次に出題するクイズ番号のインデックス
46
+
47
+ public void Start(){
48
+ if(takeQuizCount > csvDatas.Count){
49
+ Debug.LogError("出題数が問題数より多いようです。");
50
+ }
51
+
52
+ //csvデータが空の場合読み込む (一度だけ実行されます)
53
+ if (csvDatas == null){
54
+ LoadCSVDatas();
55
+ }
56
+
57
+ //リストがないとき、出題数をオーバーしたときにリストを生成
58
+ if(quizIndexList == null || currentQuizIndexIndex >= takeQuizCount){
59
+ MakeQuizIndexList();
60
+ currentQuizIndexIndex = 0;
61
+ }
62
+
63
+ //クイズをUIに表示
64
+ ShowQuiz(currentQuizIndexIndex);
65
+ currentQuizIndexIndex ++;
66
+ }
67
+
68
+ void LoadCSVDatas(){
69
+ csvDatas = new List<string[]>();
70
+ StringReader reader = new StringReader(csvFile.text);
71
+ while (reader.Peek() != -1)
72
+ {
73
+ string line = reader.ReadLine();
74
+ csvDatas.Add(line.Split(','));
75
+ }
76
+ }
77
+
78
+ void MakeQuizIndexList(){
79
+ quizIndexList = Enumerable.Range(0, csvDatas.Count)
80
+ .OrderBy(x => System.Guid.NewGuid())
81
+ .Take(csvDatas.Count)
82
+ .ToList();
83
+ }
84
+
85
+ void ShowQuiz(int index){
86
+ QuizText.text = csvDatas[quizIndexList[index]][0];
87
+ Choices1Text.text = csvDatas[quizIndexList[index]][1];
88
+ Choices2Text.text = csvDatas[quizIndexList[index]][2];
89
+ Choices3Text.text = csvDatas[quizIndexList[index]][3];
90
+ Choices4Text.text = csvDatas[quizIndexList[index]][4];
91
+ correctText.text = csvDatas[quizIndexList[index]][5];
92
+ }
93
+ }
13
94
  ```