質問編集履歴

2

誤字

2019/06/06 12:25

投稿

sushisuke6
sushisuke6

スコア18

test CHANGED
File without changes
test CHANGED
@@ -13,6 +13,8 @@
13
13
 
14
14
 
15
15
  この場合,マウスをクリックしている間は移動が続くので問題は起きないのですが,マウスのクリックをやめたときにMove関数が呼び出されないのでrigidbody2dのvelocityを制御できず,プレイヤーが目的地に達しても動きを止めることができません.
16
+
17
+
16
18
 
17
19
 
18
20
 
@@ -109,3 +111,11 @@
109
111
  }
110
112
 
111
113
  ```
114
+
115
+
116
+
117
+ ###試したこと
118
+
119
+ CursorManagerのほうでInput.GetMouseButtonUp(0)を用いてマウスクリックが終わった時の処理を別に書くことも考えたのですが,キャラクターの移動に関するコードをMove関数内でひとまとめに処理する方法が思いつきませんでした.
120
+
121
+ なんとかMove関数内でVelocityの制御を完結させる方法はないでしょうか?

1

誤字

2019/06/06 12:25

投稿

sushisuke6
sushisuke6

スコア18

test CHANGED
File without changes
test CHANGED
@@ -2,21 +2,17 @@
2
2
 
3
3
 
4
4
 
5
- 現在マウスカーソルでクリックでキャラクターの移動を処理するコードを書いています.
5
+ 現在マウスカーソルでクリックでキャラクターの移動を処理するコードを書いています.マウスカーソルを制御するCursorManagerからプレイヤーキャラクターのMove関数を呼び出すことで実行しようと考えています.
6
6
 
7
7
 
8
8
 
9
9
 
10
10
 
11
- ### 発生している問題・エラーメッセージ
11
+ ### 発生している問題
12
12
 
13
13
 
14
14
 
15
- ```
16
-
17
- エラーメ
15
+ この場合,マウスをクリクしている間は移動が続くので問題は起きないのですが,マウスのクリックをやめたときにMove関数が呼び出されないのでrigidbody2dのvelocityを制御できず,プレイヤが目的地に達しても動きを止めることができません.
18
-
19
- ```
20
16
 
21
17
 
22
18
 
@@ -50,52 +46,66 @@
50
46
 
51
47
 
52
48
 
53
- if (Input.GetMouseButton(0))
49
+ if (Input.GetMouseButton(0))
50
+
51
+ {
52
+
53
+ m_mousePosition = Input.mousePosition;
54
+
55
+ m_targetPosition = Camera.main.ScreenToWorldPoint(m_mousePosition);
56
+
57
+
58
+
59
+ playerScript.Move(m_targetPosition);
60
+
61
+
62
+
63
+ }
64
+
65
+ }
66
+
67
+ ```
68
+
69
+ ```プレイヤーのMove関数
70
+
71
+ public void Move(Vector2 targetPosition)
72
+
73
+ {
74
+
75
+ Walk();
76
+
77
+ Vector2 moveDirection = (targetPosition - m_rigidbody2d.position).normalized;
78
+
79
+ m_rigidbody2d.velocity = m_movingSpeed * moveDirection;
80
+
81
+ if(m_Scale.x * m_rigidbody2d.velocity.x < 0)
54
82
 
55
83
  {
56
84
 
57
- m_mousePosition = Input.mousePosition;
85
+ m_Scale.x = -m_Scale.x;
58
86
 
59
- m_targetPosition = Camera.main.ScreenToWorldPoint(m_mousePosition);
87
+ transform.localScale = m_Scale;
88
+
89
+ }
60
90
 
61
91
 
62
92
 
63
- switch (cursorState)
93
+ if ((m_rigidbody2d.velocity).magnitude > 0 && (targetPosition - m_rigidbody2d.position).magnitude < 0.2f)
64
94
 
65
- {
95
+ {
66
96
 
67
- case CursorStates.IDLE:
68
-
69
- playerScript.Move(m_targetPosition);
70
-
71
- break;
97
+ Idle();
72
-
73
- case CursorStates.SWORD:
74
-
75
- playerScript.Attack(m_targetMobPosition);
76
-
77
- break;
78
-
79
-
80
-
81
- }
82
98
 
83
99
  }
84
100
 
101
+ else if (m_rigidbody2d.velocity == Vector2.zero)
102
+
103
+ {
104
+
105
+ Idle();
106
+
107
+ }
108
+
109
+ }
110
+
85
111
  ```
86
-
87
-
88
-
89
- ### 試したこと
90
-
91
-
92
-
93
- ここに問題に対して試したことを記載してください。
94
-
95
-
96
-
97
- ### 補足情報(FW/ツールのバージョンなど)
98
-
99
-
100
-
101
- ここにより詳細な情報を記載してください。