質問編集履歴

2

質問5追記

2021/08/21 07:48

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -281,3 +281,141 @@
281
281
  }
282
282
 
283
283
  ```
284
+
285
+
286
+
287
+ ### 追記
288
+
289
+
290
+
291
+ ・質問5で試みた実装。
292
+
293
+ ```C#
294
+
295
+ IEnumerator myLoopCoroutine;
296
+
297
+
298
+
299
+ bool loopCoroutineIsRunning = false;
300
+
301
+
302
+
303
+ void Start (){
304
+
305
+ }
306
+
307
+
308
+
309
+ void Update(){
310
+
311
+ if (Input.GetMouseButtonDown(0)){
312
+
313
+ // コルーチンを動かす。起動もしくは再開。
314
+
315
+ StartLoopCoroutine(2f);
316
+
317
+ }
318
+
319
+ if (Input.GetMouseButtonDown(1)){
320
+
321
+ // コルーチンの停止。
322
+
323
+ StopLoopCoroutine();
324
+
325
+ }
326
+
327
+ }
328
+
329
+
330
+
331
+ void StartLoopCoroutine(float second){
332
+
333
+ Debug.Log("Start coroutine");
334
+
335
+ if (loopCoroutineIsRunning){
336
+
337
+ Debug.LogError("Stop coroutine first!");
338
+
339
+ return;
340
+
341
+ }
342
+
343
+ if (myLoopCoroutine == null){
344
+
345
+ myLoopCoroutine = LoopCoroutine();
346
+
347
+ StartCoroutine(myLoopCoroutine);
348
+
349
+ Debug.Log("New coroutine is started");
350
+
351
+ }
352
+
353
+ if (myLoopCoroutine != null){
354
+
355
+ StartCoroutine(myLoopCoroutine);
356
+
357
+ Debug.Log("Resume paused coroutine");
358
+
359
+ }
360
+
361
+ loopCoroutineIsRunning = true;
362
+
363
+ }
364
+
365
+
366
+
367
+ void StopLoopCoroutine(){
368
+
369
+ Debug.Log("Stop coroutine");
370
+
371
+ if (myLoopCoroutine == null){
372
+
373
+ Debug.LogError("Start coroutine first!");
374
+
375
+ return;
376
+
377
+ }
378
+
379
+ if (loopCoroutineIsRunning){
380
+
381
+ StopCoroutine(myLoopCoroutine);
382
+
383
+ }
384
+
385
+ loopCoroutineIsRunning = false;
386
+
387
+ Debug.Log("Coroutine is completely stopped");
388
+
389
+ }
390
+
391
+
392
+
393
+ IEnumerator LoopCoroutine(){
394
+
395
+ while(true){
396
+
397
+ yield return MyCoroutine(3f);
398
+
399
+ }
400
+
401
+ }
402
+
403
+
404
+
405
+ IEnumerator MyCoroutine(float animationLength){
406
+
407
+ Debug.Log("MyCoroutine:開始");
408
+
409
+ for (float time = 0.0f; time < animationLength; time += Time.deltaTime){
410
+
411
+ Debug.Log(time);
412
+
413
+ yield return null;
414
+
415
+ }
416
+
417
+ Debug.Log("MyCoroutine:終了");
418
+
419
+ }
420
+
421
+ ```

1

改行調整

2021/08/21 07:48

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -116,9 +116,9 @@
116
116
 
117
117
  ・質問3。
118
118
 
119
- 質問1がわからない状態ですが、コルーチンの無限呼び出しに開始・停止・終了処理の操作ができるようにしたいと思い、
119
+ 質問1がわからない状態ですが、コルーチンの無限呼び出しに開始・停止・終了処理の操作ができるようにしたいと
120
-
120
+
121
- 以下の実装を考えてみました。
121
+ 思い、以下の実装を考えてみました。
122
122
 
123
123
  質問1では、無限に呼び出すコルーチンを汎用的に引数でセットしたいと考えていましたが、
124
124
 
@@ -126,9 +126,9 @@
126
126
 
127
127
  汎用的に無限に呼び出すコルーチンをセットすることは不可能になりそうと考えました(仮に可能であれば教えていただきたいです)。
128
128
 
129
- これより、目的を妥協し、特定のコルーチンの無限呼び出しの開始・停止・終了ができるように以下のように組みました。
129
+ これより、目的を妥協し、特定のコルーチンの無限呼び出しの開始・停止・終了ができるように以下のように
130
-
130
+
131
- ただ、ゲームを再生してみると、
131
+ 組みまし。ただ、ゲームを再生してみると、
132
132
 
133
133
  ①左クリックで「開始」のログが出ることを確認する。
134
134