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

回答編集履歴

2

追記

2021/01/07 12:42

投稿

PinoMatcha
PinoMatcha

スコア368

answer CHANGED
@@ -38,6 +38,65 @@
38
38
  ![コルーチンの実行結果](1f547f0e01fd6c48302d3762dfba5f40.png)
39
39
 
40
40
  こんな感じで、**「指定秒待つ」「指定の処理が終わるまで待つ」**といったことが簡単に行えます。
41
- ```Update()```で管理するよりははるかに楽だと思うので検討してみてください。
41
+ Update()で管理するよりははるかに楽だと思うので検討してみてください。
42
42
 
43
- ただ、この場でコルーチンについて語るのは厳しいので詳しい使い方は調べていただくことになります…。
43
+ ただ、この場でコルーチンについて語るのは厳しいので詳しい使い方は調べていただくことになります…。
44
+
45
+ ### 追記: コルーチンについて2
46
+ コルーチンは一度実行してしまえば独自で処理をやり切ります。
47
+ ですので、Update()と併用も可能です。
48
+ ```C#
49
+ using System.Collections;
50
+ using UnityEngine;
51
+
52
+ public class CoroutineTest : MonoBehaviour
53
+ {
54
+
55
+ int num; // 動かす回数
56
+
57
+ bool counting = false; // カウントするかどうか
58
+ float elapsedTime = 0.0f; // 経過時間
59
+
60
+ void Start() {
61
+ // カウント用変数の初期化
62
+ counting = false;
63
+ elapsedTime = 0.0f;
64
+
65
+ StartCoroutine("TestEnumerator");
66
+ }
67
+
68
+ void Update() {
69
+ if (counting) {
70
+ elapsedTime += Time.deltaTime;
71
+
72
+ // ログが多量に出るので、経過時間を四捨五入してわざとログがダブるようにしています。
73
+ Debug.Log("カウント: " + Mathf.RoundToInt(elapsedTime).ToString() + "秒");
74
+ }
75
+ }
76
+
77
+ IEnumerator TestEnumerator() {
78
+ Debug.Log("コルーチン開始");
79
+
80
+ // countingをtrueにしてカウントスタート
81
+ counting = true;
82
+ Debug.Log("カウント開始");
83
+
84
+ num = 5; // 回数指定
85
+
86
+ for (var i = 0; i < num; i++) {
87
+ Debug.Log("繰り返し: " + (i + 1).ToString() + "回目");
88
+
89
+ // 1秒待つ
90
+ yield return new WaitForSecondsRealtime(1f);
91
+ }
92
+
93
+ Debug.Log("コルーチン終了");
94
+
95
+ counting = false;
96
+ Debug.Log("カウント停止");
97
+
98
+ yield break;
99
+ }
100
+ }
101
+ ```
102
+ ![コルーチンの実行結果2](81469480267f57bb2595edf77225b828.png)

1

追記

2021/01/07 12:42

投稿

PinoMatcha
PinoMatcha

スコア368

answer CHANGED
@@ -1,1 +1,43 @@
1
- コルーチンを使ってみては?
1
+ コルーチンを使ってみては?
2
+
3
+ ### 追記: コルーチンについて
4
+ 関数と同じような書き方になります。
5
+ 以下、テストで組んだコード
6
+ ```C#
7
+ using System.Collections;
8
+ using UnityEngine;
9
+
10
+ public class CoroutineTest : MonoBehaviour
11
+ {
12
+
13
+ int num; // 動かす回数
14
+
15
+ void Start() {
16
+ StartCoroutine("TestEnumerator");
17
+ }
18
+
19
+ IEnumerator TestEnumerator() {
20
+ Debug.Log("コルーチン開始");
21
+
22
+ num = 5; // 回数指定
23
+
24
+ for (var i = 0; i < num; i++) {
25
+ Debug.Log("繰り返し: " + (i + 1).ToString() + "回目");
26
+
27
+ // 1秒待つ
28
+ yield return new WaitForSecondsRealtime(1f);
29
+ }
30
+
31
+ Debug.Log("コルーチン終了");
32
+
33
+ yield break;
34
+ }
35
+ }
36
+ ```
37
+ 実行結果
38
+ ![コルーチンの実行結果](1f547f0e01fd6c48302d3762dfba5f40.png)
39
+
40
+ こんな感じで、**「指定秒待つ」「指定の処理が終わるまで待つ」**といったことが簡単に行えます。
41
+ ```Update()```で管理するよりははるかに楽だと思うので検討してみてください。
42
+
43
+ ただ、この場でコルーチンについて語るのは厳しいので詳しい使い方は調べていただくことになります…。