回答編集履歴

1

コメントの補足を追記

2019/01/22 04:09

投稿

fiveHundred
fiveHundred

スコア9796

test CHANGED
@@ -3,3 +3,169 @@
3
3
 
4
4
 
5
5
  典型的な丸投げなので解説はしません。
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ 追記:
14
+
15
+
16
+
17
+ DIST_さんにコメントした内容ですが、誤解されそうなので、ソースと補足を記載しておきます。
18
+
19
+
20
+
21
+ ・コルーチンを使う場合は以下のようにしてください。
22
+
23
+
24
+
25
+ ```C#
26
+
27
+ using System.Collections;
28
+
29
+ using System.Collections.Generic;
30
+
31
+ using UnityEngine;
32
+
33
+
34
+
35
+ public class TimerScript : MonoBehaviour
36
+
37
+ {
38
+
39
+ public void OnClick()
40
+
41
+ {
42
+
43
+ StartCoroutine(Timer());
44
+
45
+ }
46
+
47
+
48
+
49
+ private IEnumerator Timer()
50
+
51
+ {
52
+
53
+ yield return new WaitForSeconds(60.0f);
54
+
55
+
56
+
57
+ // 1分経過後の処理
58
+
59
+ Debug.Log("1分経過");
60
+
61
+ }
62
+
63
+ }
64
+
65
+ ```
66
+
67
+
68
+
69
+ WaitForSeconds()は若干のずれが生じます。
70
+
71
+ 上記のソースでは気になるほどではないと思いますが、DIST_さんのように「1秒ごとに処理する」方法だと60回もずれが生じてしまうため、おすすめできません。
72
+
73
+ またこの場合、「何秒経過したか」は取得できませんので、その場合は以下を参考にしてください。
74
+
75
+
76
+
77
+ Time.deltaTimeの方は毎回足し合わせるため、その際に誤差が生じる可能性があるので、以下のやり方のほうが正確だと思います。
78
+
79
+ ただし、こちらの場合は気になるほどではないと思います(私もTime.deltaTimeを使ったほうが楽だと判断した場合は使うことがあります)。
80
+
81
+
82
+
83
+ ・Time.timeを使う場合は以下のようになります。
84
+
85
+
86
+
87
+ ```C#
88
+
89
+ using System.Collections;
90
+
91
+ using System.Collections.Generic;
92
+
93
+ using UnityEngine;
94
+
95
+
96
+
97
+ public class TimerScript : MonoBehaviour
98
+
99
+ {
100
+
101
+ float startTime;
102
+
103
+ bool isTimerStarted = false;
104
+
105
+
106
+
107
+ public void OnClick()
108
+
109
+ {
110
+
111
+ // 開始時間
112
+
113
+ startTime = Time.time;
114
+
115
+
116
+
117
+ // タイマーが開始したかどうか
118
+
119
+ isTimerStarted = true;
120
+
121
+ }
122
+
123
+
124
+
125
+ void Update()
126
+
127
+ {
128
+
129
+ // タイマーが開始していない場合は処理をしない
130
+
131
+ if (!isTimerStarted)
132
+
133
+ {
134
+
135
+ return;
136
+
137
+ }
138
+
139
+
140
+
141
+ // 経過時間を計算(現在時間 - 開始時間)
142
+
143
+ float passedTime = Time.time - startTime;
144
+
145
+
146
+
147
+ if (passedTime > 60f)
148
+
149
+ {
150
+
151
+ // 1分経過後の処理
152
+
153
+ Debug.Log("1分経過");
154
+
155
+
156
+
157
+ // タイマーを無効
158
+
159
+ isTimerStarted = false;
160
+
161
+ }
162
+
163
+ }
164
+
165
+ }
166
+
167
+ ```
168
+
169
+
170
+
171
+ DateTime.Nowを使う場合にも応用できると思います。