回答編集履歴

2

編集を受けて追記

2017/09/08 13:34

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -5,3 +5,37 @@
5
5
 
6
6
 
7
7
  なので、直感で答えますが、後者のソースでは、turnDelay秒待ってから``enemiesTurn = true;``しているので、それまでの間にプレイヤーの処理が無効になってないため、暴走が起こっている、と考えられます。
8
+
9
+
10
+
11
+ ---
12
+
13
+
14
+
15
+ 編集を受けて追記:
16
+
17
+
18
+
19
+ ```C#
20
+
21
+ // MoveEnemiesを呼び出すのはMoveEnemiesと同じスクリプト上の次の関数です。
22
+
23
+ void Update ()
24
+
25
+ {
26
+
27
+ if (!playersTurn && !enemiesTurn) {
28
+
29
+ StartCoroutine (MoveEnemies ());
30
+
31
+ }
32
+
33
+ }
34
+
35
+ ```
36
+
37
+ 上記だと、playersTurnとenemiesTurnが共にfalseのとき、毎フレームごとにMoveEnemies ()が開始されてしまいます。
38
+
39
+ 前者のコルーチンでは、直ちに``enemiesTurn = true;``にしているため、この問題は起きなかったかと思いますが、後者はturnDelay秒の間、playersTurnとenemiesTurnが共にfalseになっているので、その間に大量のMoveEnemies ()が開始されることになります。
40
+
41
+ そのため、playersTurnをfalseに切り替えても、残ったMoveEnemies ()によって勝手にtrueに戻ってしまい、バグが発生したのだと思います。

1

3秒→turnDelay秒

2017/09/08 13:34

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -4,4 +4,4 @@
4
4
 
5
5
 
6
6
 
7
- なので、直感で答えますが、後者のソースでは、3秒待ってから``enemiesTurn = true;``しているので、それまでの間にプレイヤーの処理が無効になってないため、暴走が起こっている、と考えられます。
7
+ なので、直感で答えますが、後者のソースでは、turnDelay秒待ってから``enemiesTurn = true;``しているので、それまでの間にプレイヤーの処理が無効になってないため、暴走が起こっている、と考えられます。