質問編集履歴
5
提示画像を追加。
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
|
+

|
7
9
|
|
10
|
+
|
11
|
+
|
8
12
|
```ここに言語名を入力
|
9
13
|
using UnityEngine;
|
10
14
|
|
4
文章とタイトルを編集しました。
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
文章とタイトルを編集しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,23 +1,33 @@
|
|
1
|
-
OnCollisionStay()関数部
|
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
|
-
|
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
|
-
|
27
|
+
float offset = 0.1f;
|
18
28
|
|
19
|
-
|
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
|
-
|
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
タイトルを編集
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
平面ベクトルを求めてそれを使うための処理が実装できない実装方法が知りたい。
|
body
CHANGED
File without changes
|
1
文章とタイトルを編集
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
移動していない時はy軸を0にしたいが上手く実装できない。
|
1
|
+
移動していない時はy軸を0にしたいが上手く実装できない。if文の処理が知りたい
|
body
CHANGED
@@ -1,7 +1,19 @@
|
|
1
|
-
OnCollisionStay()関数部
|
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
|
-
|
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
|
```
|