質問編集履歴
2
質問5追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -139,4 +139,73 @@
|
|
139
139
|
Destroy(this.gameObject);
|
140
140
|
}
|
141
141
|
}
|
142
|
+
```
|
143
|
+
|
144
|
+
### 追記
|
145
|
+
|
146
|
+
・質問5で試みた実装。
|
147
|
+
```C#
|
148
|
+
IEnumerator myLoopCoroutine;
|
149
|
+
|
150
|
+
bool loopCoroutineIsRunning = false;
|
151
|
+
|
152
|
+
void Start (){
|
153
|
+
}
|
154
|
+
|
155
|
+
void Update(){
|
156
|
+
if (Input.GetMouseButtonDown(0)){
|
157
|
+
// コルーチンを動かす。起動もしくは再開。
|
158
|
+
StartLoopCoroutine(2f);
|
159
|
+
}
|
160
|
+
if (Input.GetMouseButtonDown(1)){
|
161
|
+
// コルーチンの停止。
|
162
|
+
StopLoopCoroutine();
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
void StartLoopCoroutine(float second){
|
167
|
+
Debug.Log("Start coroutine");
|
168
|
+
if (loopCoroutineIsRunning){
|
169
|
+
Debug.LogError("Stop coroutine first!");
|
170
|
+
return;
|
171
|
+
}
|
172
|
+
if (myLoopCoroutine == null){
|
173
|
+
myLoopCoroutine = LoopCoroutine();
|
174
|
+
StartCoroutine(myLoopCoroutine);
|
175
|
+
Debug.Log("New coroutine is started");
|
176
|
+
}
|
177
|
+
if (myLoopCoroutine != null){
|
178
|
+
StartCoroutine(myLoopCoroutine);
|
179
|
+
Debug.Log("Resume paused coroutine");
|
180
|
+
}
|
181
|
+
loopCoroutineIsRunning = true;
|
182
|
+
}
|
183
|
+
|
184
|
+
void StopLoopCoroutine(){
|
185
|
+
Debug.Log("Stop coroutine");
|
186
|
+
if (myLoopCoroutine == null){
|
187
|
+
Debug.LogError("Start coroutine first!");
|
188
|
+
return;
|
189
|
+
}
|
190
|
+
if (loopCoroutineIsRunning){
|
191
|
+
StopCoroutine(myLoopCoroutine);
|
192
|
+
}
|
193
|
+
loopCoroutineIsRunning = false;
|
194
|
+
Debug.Log("Coroutine is completely stopped");
|
195
|
+
}
|
196
|
+
|
197
|
+
IEnumerator LoopCoroutine(){
|
198
|
+
while(true){
|
199
|
+
yield return MyCoroutine(3f);
|
200
|
+
}
|
201
|
+
}
|
202
|
+
|
203
|
+
IEnumerator MyCoroutine(float animationLength){
|
204
|
+
Debug.Log("MyCoroutine:開始");
|
205
|
+
for (float time = 0.0f; time < animationLength; time += Time.deltaTime){
|
206
|
+
Debug.Log(time);
|
207
|
+
yield return null;
|
208
|
+
}
|
209
|
+
Debug.Log("MyCoroutine:終了");
|
210
|
+
}
|
142
211
|
```
|
1
改行調整
title
CHANGED
File without changes
|
body
CHANGED
@@ -57,13 +57,13 @@
|
|
57
57
|
[リファレンス](https://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.StopCoroutine.html)には、**StopCoroutineに関する、停止・破棄・再開に関する説明**は書かれていませんでした。
|
58
58
|
|
59
59
|
・質問3。
|
60
|
-
質問1がわからない状態ですが、コルーチンの無限呼び出しに開始・停止・終了処理の操作ができるようにしたいと
|
60
|
+
質問1がわからない状態ですが、コルーチンの無限呼び出しに開始・停止・終了処理の操作ができるようにしたいと
|
61
|
-
以下の実装を考えてみました。
|
61
|
+
思い、以下の実装を考えてみました。
|
62
62
|
質問1では、無限に呼び出すコルーチンを汎用的に引数でセットしたいと考えていましたが、
|
63
63
|
コルーチンの多重起動防止のnullチェックを考えると、そのフラグをフィールドで持たせるしかなさそうなので、
|
64
64
|
汎用的に無限に呼び出すコルーチンをセットすることは不可能になりそうと考えました(仮に可能であれば教えていただきたいです)。
|
65
|
-
これより、目的を妥協し、特定のコルーチンの無限呼び出しの開始・停止・終了ができるように以下のように
|
65
|
+
これより、目的を妥協し、特定のコルーチンの無限呼び出しの開始・停止・終了ができるように以下のように
|
66
|
-
ただ、ゲームを再生してみると、
|
66
|
+
組みました。ただ、ゲームを再生してみると、
|
67
67
|
①左クリックで「開始」のログが出ることを確認する。
|
68
68
|
②右クリックで、「終了」のログが出る前に停止する。
|
69
69
|
③再び、左クリックすると、「開始」のログが出力される。
|