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

質問編集履歴

5

提示画像を追加。

2020/02/16 06:03

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,14 @@
1
1
  質問内容はタイトル通りですが、デバッグログを出力すると斜面の上る時と斜面を下る時で**planeVec.y**の値が違います。つまりこのやり方では実装できないということがわかりました、では斜面を下る時の平面ベクトルはどうすれば求められるのでしょうか?
2
2
 
3
3
  **OnCollisionStay()関数部**ですがカプセルコライダーと当たった場所を検出してそれの座標を使って**平面ベクトルを求めて**その値のY座標のプレイヤー移動変数の**move.y**に入れて使っていますが ここで問題が発生していまして**「斜面を下がる時に下がりはしますが平面に沿って移動してくれません。」** の原因が知りたいです。
4
+
4
5
  質問2、平面ベクトルは上手く求められてますでしょうか?
5
6
 
6
7
 
8
+ ![イメージ説明](ac80a64f2a03fcddf0129fc5c65f7e98.png)
7
9
 
10
+
11
+
8
12
  ```ここに言語名を入力
9
13
  using UnityEngine;
10
14
 

4

文章とタイトルを編集しました。

2020/02/16 06:03

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- 平面ベクトルを求めてそれを使うための処理が実装できない実装が知りたい。
1
+ 斜面を下がる時の平面ベクトルを求め方が知りたい。
body CHANGED
@@ -1,3 +1,5 @@
1
+ 質問内容はタイトル通りですが、デバッグログを出力すると斜面の上る時と斜面を下る時で**planeVec.y**の値が違います。つまりこのやり方では実装できないということがわかりました、では斜面を下る時の平面ベクトルはどうすれば求められるのでしょうか?
2
+
1
3
  **OnCollisionStay()関数部**ですがカプセルコライダーと当たった場所を検出してそれの座標を使って**平面ベクトルを求めて**その値のY座標のプレイヤー移動変数の**move.y**に入れて使っていますが ここで問題が発生していまして**「斜面を下がる時に下がりはしますが平面に沿って移動してくれません。」** の原因が知りたいです。
2
4
  質問2、平面ベクトルは上手く求められてますでしょうか?
3
5
 

3

文章とタイトルを編集しました。

2020/02/16 05:59

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,23 +1,33 @@
1
- OnCollisionStay()関数部の処理動いてないきはmove.y = 0;にして例えば斜面上に登っているときはmove.y = 0;することによって上に上昇とを防ぐプログラムに斜面を下る時下がれるコードつまり平面ベクトル進む移動処理を実現したい。
1
+ **OnCollisionStay()関数部**すがカプセルコライダー当たった場所を検出してそれの座標使って**平面ベクトルを求めて**その値のY座標のプレイヤー移動変数の**move.y**入れて使っていまが こで問題が発生いまして**「斜面を下る時下がりはしますが平面に沿って移動してくれません。」** の原因が知りたいです
2
+ 質問2、平面ベクトルは上手く求められてますでしょうか?
2
3
 
3
- **質問**
4
4
 
5
- 条件分岐のif文に[もし移動中だったら]というif文を作り移動中じゃなかったらelse move.y = 0;という処理を作ったのですが上手く実行されず
6
- またその原因と実装法が知りたい。 ////ここですのコード部
7
5
 
6
+ ```ここに言語名を入力
7
+ using UnityEngine;
8
8
 
9
+ public class Controller : MonoBehaviour
10
+ {
9
11
 
10
- ##試したこと
12
+ /* Ik 関係
11
- Get.Axis()は0.1から1.0までの値が出るのでゼロじゃないときだからという形でif文を作ったのですが違いました move_direction
12
- また移動速度であるmove変数で移動中だったらつまり0じゃないときということでもif文を作りましたが違いました
13
+ Vector3 rightFootPos = new Vector3(0, 0, 0);
14
+ Vector3 leftFootPos = new Vector3(0, 0, 0);
13
15
 
16
+ Quaternion rightFootRot = new Quaternion(0, 0, 0, 0);
17
+ Quaternion leftFootRot = new Quaternion(0, 0, 0, 0);
14
18
 
19
+ bool isRightFootIK = false;
20
+ bool isLeftFootIK = false;
15
21
 
22
+ float RightIkWeight = 0;
23
+ float LeftIkWeight = 0;
24
+
25
+ Vector3 rayPositionOffset = new Vector3(0, 0, 0);
16
- ```ここに言語名を入力
26
+ float rayRange = 1.0f;
17
- using UnityEngine;
27
+ float offset = 0.1f;
18
28
 
19
- public class Controller : MonoBehaviour
29
+ */
20
- {
30
+
21
31
 
22
32
  private float input_h;
23
33
  private float input_v;
@@ -33,6 +43,7 @@
33
43
  private bool c = false;
34
44
  // private CharacterController cc;
35
45
 
46
+ private Vector3 planeVec;//平面ベクトル
36
47
 
37
48
  GameObject ground_ray;
38
49
 
@@ -116,13 +127,10 @@
116
127
  void Update()
117
128
  {
118
129
 
130
+ // Debug.Log("move_direction: " + move_direction);
119
- Gravity_Mng();
131
+ // Debug.Log("move : " + move);
120
- Move_Mng();
121
132
 
122
- Debug.Log("move_direction: " + move_direction);
123
- Debug.Log("move : " + move);
124
133
 
125
-
126
134
  // Debug.Log(" update move.y: " + move.y);
127
135
 
128
136
 
@@ -133,7 +141,22 @@
133
141
  void FixedUpdate()
134
142
  {
135
143
 
144
+ Gravity_Mng();
145
+ Move_Mng();
146
+
136
- // rb.AddForce(move.x, move.y, move.z);
147
+ // rb.AddForce(move.x, move.y, move.z);
148
+ // Debug.Log("move_direction: " + move_direction);
149
+ Debug.Log("move" + getSpeed());
150
+
151
+ /*
152
+ if (move_direction != Vector3.zero){
153
+ move.y = planeVec.y;
154
+ Debug.Log("v: " + planeVec.y);
155
+ }else{
156
+ move.y = 0;
157
+ }
158
+ */
159
+
137
160
  rb.AddForce(move.x,move.y,move.z);
138
161
 
139
162
  }
@@ -143,35 +166,36 @@
143
166
  private void OnCollisionStay(Collision collision)
144
167
  {
145
168
 
146
-
147
169
  // Debug.Log("OnCollisionStay: " + collision.contacts[0].point);
148
170
  contacts.transform.position = collision.contacts[0].point;
171
+ // Debug.Log(collision.contacts[0].point);
149
172
  // Debug.Log("あああああ");
173
+
174
+
150
175
  Vector3 f = transform.forward;
151
176
  Vector3 vv = collision.contacts[0].normal;
177
+ Vector3 dir = f - Vector3.Dot(f, vv) * vv;
152
178
 
179
+ // f = dir.normalized * walk_speed;//y軸だけ使う
180
+ // planeVec = dir.normalized * walk_speed;
181
+ // planeVec = dir.normalized * getSpeed();
182
+ planeVec = dir.normalized * getSpeed();
183
+ move.y = planeVec.y;
153
184
 
154
- Vector3 dir = f - Vector3.Dot(f, vv) * vv;
155
185
 
156
- f = dir.normalized * walk_speed;//y軸だけ使う
157
186
 
187
+ // Debug.Log("move.y: " + move.y);
158
188
 
159
- // if (Mathf.Abs(move.z + move.x) > 0)
160
- if (move_direction != Vector3.zero)////////////////////////////////ここです。
161
- {
162
- Debug.Log("移動中");
163
- move.y = f.y;
164
- }else{
165
189
 
166
- move.y = 0;
167
- //rb.velocity = new Vector3(rb.velocity.x,0,rb.velocity.z);
168
- Debug.Log("停止中");
169
- }
190
+ }
170
191
 
192
+ private void OnCollisionExit(Collision c)
193
+ {
194
+ // move.y = -200.0f;
195
+ }
171
196
 
172
- Debug.Log("move.y: " + move.y);
173
197
 
174
198
 
175
- }
176
199
  }
200
+
177
201
  ```

2

タイトルを編集

2020/02/16 05:32

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- 移動しいない時はy軸0にし上手く実装できない。if文の処理が知りたい
1
+ 平面ベクトルを求めそれ使うめの処理が実装できない実装方法が知りたい
body CHANGED
File without changes

1

文章とタイトルを編集

2020/02/16 05:18

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- 移動していない時はy軸を0にしたいが上手く実装できない。
1
+ 移動していない時はy軸を0にしたいが上手く実装できない。if文の処理が知りたい
body CHANGED
@@ -1,7 +1,19 @@
1
- OnCollisionStay()関数部のですがなぜキーを離している時にmove.y = 0;と表示されるはずなのですがmove.yがプラスの値ってしまい上昇するのでょうか?
1
+ OnCollisionStay()関数部の処理動いときはmove.y = 0;にして例えば斜面を上に登っていときはmove.y = 0;することによって上に上昇することを防ぐプログラムにたい。また斜面を下る時も下がれるコードつまり平面ベクトルに進む移動処理を実現したい。
2
2
 
3
+ **質問**
3
4
 
5
+ 条件分岐のif文に[もし移動中だったら]というif文を作り移動中じゃなかったらelse move.y = 0;という処理を作ったのですが上手く実行されず
6
+ またその原因と実装法が知りたい。 ////ここですのコード部
7
+
8
+
9
+
10
+ ##試したこと
11
+ Get.Axis()は0.1から1.0までの値が出るのでゼロじゃないときだからという形でif文を作ったのですが違いました move_direction
12
+ また移動速度であるmove変数で移動中だったらつまり0じゃないときということでもif文を作りましたが違いました
13
+
14
+
15
+
4
- ```ここに言語を入力
16
+ ```ここに言語を入力
5
17
  using UnityEngine;
6
18
 
7
19
  public class Controller : MonoBehaviour
@@ -107,9 +119,11 @@
107
119
  Gravity_Mng();
108
120
  Move_Mng();
109
121
 
122
+ Debug.Log("move_direction: " + move_direction);
123
+ Debug.Log("move : " + move);
110
124
 
111
125
 
112
- Debug.Log(" update move.y: " + move.y);
126
+ // Debug.Log(" update move.y: " + move.y);
113
127
 
114
128
 
115
129
  }
@@ -121,7 +135,6 @@
121
135
 
122
136
  // rb.AddForce(move.x, move.y, move.z);
123
137
  rb.AddForce(move.x,move.y,move.z);
124
- Debug.Log(" Fixed move.y: " + move.y);
125
138
 
126
139
  }
127
140
  //////////////////////////////////////////////////////////////////////////////////////////////
@@ -143,20 +156,22 @@
143
156
  f = dir.normalized * walk_speed;//y軸だけ使う
144
157
 
145
158
 
146
- if (Mathf.Abs(move.z + move.x) > 0)
159
+ // if (Mathf.Abs(move.z + move.x) > 0)
160
+ if (move_direction != Vector3.zero)////////////////////////////////ここです。
147
161
  {
162
+ Debug.Log("移動中");
148
163
  move.y = f.y;
149
164
  }else{
150
165
 
151
166
  move.y = 0;
152
167
  //rb.velocity = new Vector3(rb.velocity.x,0,rb.velocity.z);
153
-
168
+ Debug.Log("停止中");
154
169
  }
155
170
 
156
171
 
157
172
  Debug.Log("move.y: " + move.y);
158
173
 
174
+
159
175
  }
160
176
  }
161
-
162
177
  ```