回答編集履歴

2

追記

2017/03/06 12:16

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -127,3 +127,95 @@
127
127
  return Action.None;
128
128
 
129
129
  ```
130
+
131
+
132
+
133
+ #追記
134
+
135
+
136
+
137
+ コルーチンの呼び出し方がわからない、という意味でしょうか。
138
+
139
+ 僕に書けるのはリファレンスから想像して書くぐらいですが
140
+
141
+
142
+
143
+ マニュアル通りだと、あるアニメーションの排他制御は以下のような形になると思います。
144
+
145
+
146
+
147
+ ```C#
148
+
149
+ public class Sample : MonoBehaviour
150
+
151
+ {
152
+
153
+ private Animation animation;
154
+
155
+ private bool isRunning;
156
+
157
+
158
+
159
+ void Start()
160
+
161
+ {
162
+
163
+ animation = GetComponent<Animation>();
164
+
165
+ }
166
+
167
+
168
+
169
+ void Update()
170
+
171
+ {
172
+
173
+ if (Input.GetKey(KeyCode.Space))
174
+
175
+ {
176
+
177
+ StartCoroutine(Concurrent());
178
+
179
+ }
180
+
181
+ }
182
+
183
+
184
+
185
+ private IEnumerable Concurrent()
186
+
187
+ {
188
+
189
+ if (isRunning) yield break;
190
+
191
+
192
+
193
+ isRunning = true;
194
+
195
+
196
+
197
+ animation.Play("Sample1");
198
+
199
+
200
+
201
+ yield return new WaitUntil(() => !animation.IsPlaying("Sample1"));
202
+
203
+
204
+
205
+ isRunning = false;
206
+
207
+ }
208
+
209
+ }
210
+
211
+ ```
212
+
213
+
214
+
215
+ yield return で次にいつアクションを実行するのかを制御するようですから、例えば1秒かけて動作させるとかそういった条件を合わせて書いておくといいでしょう。
216
+
217
+
218
+
219
+ Updateメソッドは毎フレーム呼ばれますが、Concurrentが1度実行状態に入るとアニメーションが終わるまでは`yield return new WaitUntil`を超えることができません。
220
+
221
+ そして、アニメーションが終わった後にフラグがfalseになる、という想定です。

1

よりサンプルを具体的にしました

2017/03/06 12:16

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -1,6 +1,4 @@
1
1
  ※僕はUnityやってないし、ゲームプログラマーでもないから参考程度に
2
-
3
-
4
2
 
5
3
 
6
4
 
@@ -26,9 +24,13 @@
26
24
 
27
25
 
28
26
 
29
- // 戻ってくる条件を返す。例えばアニメーション中とか、地面に着地するまでとか。
27
+ animation.Play("DoSomething");
30
28
 
29
+
30
+
31
+ // 戻ってくる条件を返す。例えばアニメーションが終わるまで、とか。
32
+
31
- yield return ?
33
+ yield return new WaitUntil(() => !animation.IsPlaying("DoSomething"));
32
34
 
33
35
 
34
36