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

質問編集履歴

3

switch文の後に追記しました。

2021/02/11 13:25

投稿

cloford_
cloford_

スコア2

title CHANGED
File without changes
body CHANGED
@@ -14,9 +14,6 @@
14
14
  ご指摘お願いいたします。
15
15
 
16
16
  ```C#
17
- //private Rigidbody2D body2d;
18
- //public float speed = 2;
19
- //---------------
20
17
  using System.Collections;
21
18
  using System.Collections.Generic;
22
19
  using Unity.Mathematics;
@@ -40,6 +37,8 @@
40
37
  float savey = 0;
41
38
  float x, y;
42
39
 
40
+
41
+
43
42
  void Start()
44
43
  {
45
44
  //このスクリプトがアタッチされたゲームオブジェクトの動作をいただく
@@ -48,8 +47,13 @@
48
47
  this.spriteRenderer = GetComponent<SpriteRenderer>();
49
48
  }
50
49
 
50
+
51
+
51
52
  void Update()
52
53
  {
54
+
55
+ Debug.Log(move);
56
+
53
57
  if (savex == 0 && move == false)
54
58
  {
55
59
  x = Input.GetAxisRaw("Horizontal");
@@ -66,14 +70,16 @@
66
70
  savey = y;
67
71
  move = true;
68
72
  }
69
-
73
+
70
74
  if (move == true)
71
75
  {
72
- Vector2 direction = new Vector2(x, y).normalized;
76
+ Vector2 direction = new Vector2(savex, savey).normalized;
73
- body2d.AddForce(direction * speed);   //body2d.addforce = の形では動かなかったので変更
77
+ body2d.velocity = direction * speed;
74
78
  }
79
+
75
80
  }
81
+
76
- private void OnCollisionEnter2D(Collision2D col)//移動先の壁の色にスプライトを変更し、moveをfalseにして次の移動に備える
82
+ private void OnCollisionEnter2D(Collision2D col)
77
83
  {
78
84
  switch (col.gameObject.tag)
79
85
  {
@@ -94,9 +100,14 @@
94
100
 
95
101
  case "black":
96
102
  spriteRenderer.sprite = SpriteBlack;
103
+ move = false;
97
104
  break;
98
105
  }
106
+ savex = 0;
107
+ savey = 0;
99
108
  }
100
109
  }
101
110
 
111
+
112
+
102
113
  ```

2

全文載せました。スクリプトはプレイヤーキャラクターにアタッチしています。

2021/02/11 13:25

投稿

cloford_
cloford_

スコア2

title CHANGED
File without changes
body CHANGED
@@ -7,18 +7,96 @@
7
7
 
8
8
  方法を、どなたか教えて下さい。よろしくお願いします。
9
9
 
10
+
11
+ 追記:
12
+ 教えていただいた部分を参考にして書かせて頂きました。
13
+ まっすぐ壁にぶつかるまで移動できるようになったのですが、その後全く動かなくなりました。
14
+ ご指摘お願いいたします。
15
+
10
16
  ```C#
11
17
  //private Rigidbody2D body2d;
12
18
  //public float speed = 2;
13
19
  //---------------
20
+ using System.Collections;
21
+ using System.Collections.Generic;
22
+ using Unity.Mathematics;
23
+ using UnityEngine;
24
+ using UnityEngine.UI;
25
+
26
+ public class PlayerBox2 : MonoBehaviour
27
+ {
28
+ [SerializeField] private Sprite SpriteRed = default;
29
+ [SerializeField] private Sprite SpriteBlue = default;
30
+ [SerializeField] private Sprite SpriteGreen = default;
31
+ [SerializeField] private Sprite SpriteBlack = default;
32
+
33
+ public float speed = 2;
34
+ private Rigidbody2D body2d;
35
+ private Animator anima;
36
+ private SpriteRenderer spriteRenderer;
37
+
38
+ bool move = false;
39
+ float savex = 0;
40
+ float savey = 0;
41
+ float x, y;
42
+
43
+ void Start()
44
+ {
45
+ //このスクリプトがアタッチされたゲームオブジェクトの動作をいただく
46
+ this.body2d = GetComponent<Rigidbody2D>();
47
+ this.anima = GetComponent<Animator>();
48
+ this.spriteRenderer = GetComponent<SpriteRenderer>();
49
+ }
50
+
14
51
  void Update()
15
52
  {
16
- if(body2d.IsSleeping())
53
+ if (savex == 0 && move == false)
17
54
  {
18
- float x = Input.GetAxisRaw("Horizontal");
55
+ x = Input.GetAxisRaw("Horizontal");
19
- float y = Input.GetAxisRaw("Vertical");
56
+ y = Input.GetAxisRaw("Vertical");
57
+ }
58
+
59
+ if (x != 0)
60
+ {
61
+ savex = x;
62
+ move = true;
63
+ }
64
+ if (y != 0)
65
+ {
66
+ savey = y;
67
+ move = true;
68
+ }
69
+
70
+ if (move == true)
71
+ {
20
72
  Vector2 direction = new Vector2(x, y).normalized;
21
- body2d.AddForce = direction * speed;
73
+ body2d.AddForce(direction * speed);   //body2d.addforce = の形では動かなかったので変更
22
74
  }
23
75
  }
76
+ private void OnCollisionEnter2D(Collision2D col)//移動先の壁の色にスプライトを変更し、moveをfalseにして次の移動に備える
77
+ {
78
+ switch (col.gameObject.tag)
79
+ {
80
+ case "blue":
81
+ spriteRenderer.sprite = SpriteBlue;
82
+ move = false;
83
+ break;
84
+
85
+ case "red":
86
+ spriteRenderer.sprite = SpriteRed;
87
+ move = false;
88
+ break;
89
+
90
+ case "green":
91
+ spriteRenderer.sprite = SpriteGreen;
92
+ move = false;
93
+ break;
94
+
95
+ case "black":
96
+ spriteRenderer.sprite = SpriteBlack;
97
+ break;
98
+ }
99
+ }
100
+ }
101
+
24
102
  ```

1

タグにC#を追加

2021/02/11 09:23

投稿

cloford_
cloford_

スコア2

title CHANGED
File without changes
body CHANGED
File without changes