回答編集履歴

4

参考コードを追記

2018/05/03 18:26

投稿

negitama
negitama

スコア943

test CHANGED
@@ -61,3 +61,83 @@
61
61
  ```
62
62
 
63
63
  のようにすると、マウスの左クリックを押すたびに処理が行われます。
64
+
65
+
66
+
67
+ ### 参考コード
68
+
69
+
70
+
71
+ シンプルに書くとこういうことになります。上の【追記】で書いた理由から、for文での処理にはしていません。
72
+
73
+
74
+
75
+ ```C#
76
+
77
+ using System.Collections.Generic;
78
+
79
+ using UnityEngine;
80
+
81
+
82
+
83
+ public class RandomPickUpFromList : MonoBehaviour
84
+
85
+ {
86
+
87
+ // インスペクターから設定
88
+
89
+ [SerializeField] List<string> questionList;
90
+
91
+
92
+
93
+
94
+
95
+ private void Update ()
96
+
97
+ {
98
+
99
+ // マウスの左クリックが押されるたびに処理を行う
100
+
101
+ if ( Input.GetMouseButtonDown ( 0 ) )
102
+
103
+ {
104
+
105
+ // 問題が残っていない場合は処理を行わない
106
+
107
+ if(questionList.Count == 0 )
108
+
109
+ {
110
+
111
+ print ( "もう問題がない" );
112
+
113
+ return;
114
+
115
+ }
116
+
117
+
118
+
119
+ // 問題番号をランダムに選ぶ
120
+
121
+ var questionNum = Random.Range(0, questionList.Count);
122
+
123
+
124
+
125
+ // 出題する(Consoleに出力する例)
126
+
127
+ print ( questionList[questionNum] );
128
+
129
+
130
+
131
+ // 問題番号の要素をリストから削除する
132
+
133
+ questionList.RemoveAt ( questionNum );
134
+
135
+ }
136
+
137
+ }
138
+
139
+ }
140
+
141
+
142
+
143
+ ```

3

for文を使っていることに対するコメントを追記

2018/05/03 18:26

投稿

negitama
negitama

スコア943

test CHANGED
@@ -37,3 +37,27 @@
37
37
  ```
38
38
 
39
39
  のようにしてください。
40
+
41
+
42
+
43
+ 【追記】
44
+
45
+ あと、質問者さんのコードでは for 文で、Q.Count を上限とする繰り返し処理になっていますので、for 文の中で リスト Q の要素数を削ってしまうとまずそうです。
46
+
47
+ クイズの出題は1問ずつだと思うので、ここは for 文 をやめて、(仮置きで)何かボタンを押すごとに処理されるようにしてみてはいかがでしょうか。
48
+
49
+ たとえば、
50
+
51
+ ```C#
52
+
53
+ if(Input.GetMouseButtonDown(0))
54
+
55
+ {
56
+
57
+ // 処理の中身
58
+
59
+ }
60
+
61
+ ```
62
+
63
+ のようにすると、マウスの左クリックを押すたびに処理が行われます。

2

説明追記

2018/05/03 16:25

投稿

negitama
negitama

スコア943

test CHANGED
@@ -23,3 +23,17 @@
23
23
  ```
24
24
 
25
25
  のようにしてみてください。
26
+
27
+
28
+
29
+ なお、上記コードでは Random.Range(x, y) を使っています。これは(引数が整数なら)x 以上 y 未満のランダムな値を返すもので、UnityEngine.Random クラスのメソッドです。
30
+
31
+ もしコードの冒頭で using System; を書いている場合は System.Random クラスと UnityEngine.Random クラスのどちらを使うのかプログラムが解釈できずにエラーになります。その場合は、using System; の行を削除または // でコメントアウトするか、上記コードで
32
+
33
+ ```
34
+
35
+ var num = UnityEngine.Random.Range(0, Q.Count);
36
+
37
+ ```
38
+
39
+ のようにしてください。

1

説明追記

2018/05/03 15:50

投稿

negitama
negitama

スコア943

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  質問者さんが「試したこと」でやろうとしているのは B の方法かと思います。
10
10
 
11
-
11
+ エラーメッセージの意味は、RemoveAtの引数には要素番号(int)を指定する必要があるのに、要素の中身そのもの(string)を指定してしまっている、ということだと思います。
12
12
 
13
13
  ```C#
14
14
 
@@ -16,6 +16,8 @@
16
16
 
17
17
  var up = Q[num];
18
18
 
19
+ qLabel.text = up;
20
+
19
21
  Q.RemoveAt(num);
20
22
 
21
23
  ```