回答編集履歴

2

追記

2019/11/07 09:31

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  void Start(){
42
42
 
43
-
43
+ // 3秒のタイマーをセット。完了時にはデバッグログを実行するコールバックを登録
44
44
 
45
45
  myTimer = Timer(3,()=> { Debug.Log("終了"); });
46
46
 
@@ -52,7 +52,7 @@
52
52
 
53
53
  private void Update() {
54
54
 
55
-
55
+ // マウスクリックで開始・停止を切り替え
56
56
 
57
57
  if (Input.GetMouseButtonDown(0)) {
58
58
 

1

質問内容にあわせて変更

2019/11/07 09:31

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -5,6 +5,16 @@
5
5
  【Unity】はじめてのコルーチン!これさえ読めば基礎はカンペキ
6
6
 
7
7
  [https://www.sejuku.net/blog/83712](https://www.sejuku.net/blog/83712)
8
+
9
+
10
+
11
+ ※ 想定がタイマーだったので書き換えました。
12
+
13
+ 画面をクリックすると3秒のカウントダウンが始まります。
14
+
15
+ カウントダウン中にクリックするとカウントダウンが止まります。
16
+
17
+ 再度クリックでカウントダウン再開します。
8
18
 
9
19
 
10
20
 
@@ -22,47 +32,71 @@
22
32
 
23
33
 
24
34
 
35
+ IEnumerator myTimer;
36
+
37
+ bool isStart;
38
+
39
+
40
+
25
41
  void Start(){
26
42
 
27
43
 
28
44
 
29
- // コルーチンを呼び出し、3秒待ってログが表示される
45
+ myTimer = Timer(3,()=> { Debug.Log("終了"); });
30
-
31
- StartCoroutine(Timer(3));
32
46
 
33
47
 
34
-
35
- // コールバックつきのコルーチンを呼び出し、5秒後に {} の中の処理が実行される
36
-
37
- StartCoroutine(Timer(5, () => { Debug.Log("コールバックつき"); }));
38
48
 
39
49
  }
40
50
 
41
51
 
42
52
 
43
- // 指定秒数待つタイマー
53
+ private void Update() {
44
54
 
45
- IEnumerator Timer (float sec) {
46
55
 
47
- yield return new WaitForSeconds(sec); // sec で渡された秒数で停止
48
56
 
49
- Debug.Log(sec + "秒経過"); // タイマーが経過したことをログで表示
57
+ if (Input.GetMouseButtonDown(0)) {
58
+
59
+ if (!isStart) {
60
+
61
+ isStart = true;
62
+
63
+ StartCoroutine(myTimer);
64
+
65
+ } else {
66
+
67
+ isStart = false;
68
+
69
+ StopCoroutine(myTimer);
70
+
71
+ }
72
+
73
+ }
74
+
75
+
50
76
 
51
77
  }
52
78
 
53
79
 
54
80
 
55
- // 指定秒数待つタイマー
81
+ IEnumerator Timer(float sec,System.Action callback) {
56
82
 
57
- // コールバックあり
83
+ float nowTime = sec;
58
84
 
59
- IEnumerator Timer(float sec,System.Action callback) {
85
+ while(nowTime > 0) {
60
86
 
61
- yield return new WaitForSeconds(sec);
87
+ Debug.Log(nowTime);
62
88
 
89
+ yield return new WaitForSeconds(1);
90
+
91
+ nowTime--;
92
+
93
+ }
94
+
63
- callback?.Invoke(); // callback で登録した動作を実行
95
+ callback?.Invoke();
64
96
 
65
97
  }
98
+
99
+
66
100
 
67
101
 
68
102