質問編集履歴

2

解決版の掲載

2019/09/09 08:18

投稿

usagi3kaku
usagi3kaku

スコア9

test CHANGED
File without changes
test CHANGED
@@ -60,10 +60,6 @@
60
60
 
61
61
 
62
62
 
63
- // GameObject gameObject;
64
-
65
-
66
-
67
63
  public string upAnime ;
68
64
 
69
65
  public string downAnime ;
@@ -281,3 +277,167 @@
281
277
  このコードの問題点や、それとは別のもっと簡単な方法でも、ご教示いただけると幸いです。
282
278
 
283
279
  よろしくお願いいたします。
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+ ##解決しましたので
288
+
289
+ 完成版のコードを掲載しておこうと思います。
290
+
291
+
292
+
293
+ ```C#
294
+
295
+ public class Mob_Anime_Setting : MonoBehaviour
296
+
297
+ {
298
+
299
+ Rigidbody2D rigid2D;
300
+
301
+ Animator animator;
302
+
303
+
304
+
305
+ public string nowMode;
306
+
307
+
308
+
309
+ public string upAnime;
310
+
311
+ public string downAnime;
312
+
313
+ public string rightAnime;
314
+
315
+ public string leftAnime;
316
+
317
+ /*
318
+
319
+ public string down_stop;
320
+
321
+ public string up_stop;
322
+
323
+ public string right_stop;
324
+
325
+ public string left_stop;
326
+
327
+  停止時用のアニメーションクリップも用意しましたが、今回は移動中を示すbool変数をつかってアニメの再生自体を止める仕様にしました。
328
+
329
+ */
330
+
331
+
332
+
333
+ bool moving ; //移動中かどうか。
334
+
335
+
336
+
337
+ Vector3 pastpos;
338
+
339
+ Vector3 nowpos;
340
+
341
+
342
+
343
+ void Start()
344
+
345
+ {
346
+
347
+ this.rigid2D = GetComponent<Rigidbody2D>();
348
+
349
+ this.animator = GetComponent<Animator>();
350
+
351
+ }
352
+
353
+
354
+
355
+
356
+
357
+ void Update()
358
+
359
+ {
360
+
361
+ pastpos = nowpos;
362
+
363
+ nowpos = this.gameObject.transform.position;
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+ if (nowpos.x == pastpos.x)
372
+
373
+
374
+
375
+ {
376
+
377
+ if (nowpos.y > pastpos.y) { nowMode = upAnime; }
378
+
379
+ else if (nowpos.y < pastpos.y) { nowMode = downAnime; }
380
+
381
+ }
382
+
383
+
384
+
385
+ else if (nowpos.y == pastpos.y)
386
+
387
+ {
388
+
389
+ if (this.rigid2D.velocity.x > 0) { nowMode = rightAnime; }
390
+
391
+ else if (this.rigid2D.velocity.x < 0) { nowMode = leftAnime; }
392
+
393
+ }
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+ if(rigid2D.velocity.x == 0 && rigid2D.velocity.y == 0)
402
+
403
+ { moving = false; }
404
+
405
+ //ベロシティがゼロなら止まっている
406
+
407
+
408
+
409
+ else
410
+
411
+ { moving = true; }
412
+
413
+ //さもなくば動いている
414
+
415
+ }
416
+
417
+
418
+
419
+
420
+
421
+ void FixedUpdate()
422
+
423
+ {
424
+
425
+ if (moving == false) { GetComponent<Animator>().speed = 0.0f; } //止まっている時はアニメーターの速度を0にして動きを停止
426
+
427
+ else { GetComponent<Animator>().speed = 1.0f; } //止まっていないならアニメ速度を標準に戻す
428
+
429
+
430
+
431
+ GetComponent<Animator>().Play(nowMode);               //現在のモードに指定されているクリップを再生
432
+
433
+
434
+
435
+
436
+
437
+ }
438
+
439
+ }
440
+
441
+ ```
442
+
443
+ ありがとうございました!

1

コード部分をマークダウンに変更

2019/09/09 08:18

投稿

usagi3kaku
usagi3kaku

スコア9

test CHANGED
@@ -1 +1 @@
1
- オブジェクトの移動する向きに応じて、表示されるアニメクリップを変化させたい。
1
+ オブジェクトの移動する向きに応じて、表示されるアニメクリップを変化させたい。UNITY2D
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- UNITYで、オーソドックスな2DRPGのような見降ろし視点のゲームを作り始めました。初学者です。
5
+ UNITYで、オーソドックスな2DRPGのような見降ろし視点のゲームを作り始めました。初学者です。
6
6
 
7
7
  オブジェクトの移動する方向に応じて、上下左右に歩くアニメーションクリップの表示を切り替える、というごく基本的な事なのですが実現できず困っています。
8
8
 
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- C#
35
+ ```C#
36
36
 
37
37
  using System.Collections;
38
38
 
@@ -256,7 +256,7 @@
256
256
 
257
257
 
258
258
 
259
-
259
+ ```
260
260
 
261
261
 
262
262
 
@@ -281,11 +281,3 @@
281
281
  このコードの問題点や、それとは別のもっと簡単な方法でも、ご教示いただけると幸いです。
282
282
 
283
283
  よろしくお願いいたします。
284
-
285
-
286
-
287
- ### 補足情報(FW/ツールのバージョンなど)
288
-
289
-
290
-
291
- ここにより詳細な情報を記載してください。