質問編集履歴
5
提示画像を追加。
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,12 +4,20 @@
|
|
4
4
|
|
5
5
|
**OnCollisionStay()関数部**ですがカプセルコライダーと当たった場所を検出してそれの座標を使って**平面ベクトルを求めて**その値のY座標のプレイヤー移動変数の**move.y**に入れて使っていますが ここで問題が発生していまして**「斜面を下がる時に下がりはしますが平面に沿って移動してくれません。」** の原因が知りたいです。
|
6
6
|
|
7
|
+
|
8
|
+
|
7
9
|
質問2、平面ベクトルは上手く求められてますでしょうか?
|
8
10
|
|
9
11
|
|
10
12
|
|
11
13
|
|
12
14
|
|
15
|
+
![イメージ説明](ac80a64f2a03fcddf0129fc5c65f7e98.png)
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
13
21
|
|
14
22
|
|
15
23
|
```ここに言語名を入力
|
4
文章とタイトルを編集しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
平面ベクトルを求め
|
1
|
+
斜面を下がる時の平面ベクトルを求め方が知りたい。
|
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
質問内容はタイトル通りですが、デバッグログを出力すると斜面の上る時と斜面を下る時で**planeVec.y**の値が違います。つまりこのやり方では実装できないということがわかりました、では斜面を下る時の平面ベクトルはどうすれば求められるのでしょうか?
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
**OnCollisionStay()関数部**ですがカプセルコライダーと当たった場所を検出してそれの座標を使って**平面ベクトルを求めて**その値のY座標のプレイヤー移動変数の**move.y**に入れて使っていますが ここで問題が発生していまして**「斜面を下がる時に下がりはしますが平面に沿って移動してくれません。」** の原因が知りたいです。
|
2
6
|
|
3
7
|
質問2、平面ベクトルは上手く求められてますでしょうか?
|
3
文章とタイトルを編集しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,26 +1,6 @@
|
|
1
|
-
OnCollisionStay()関数部
|
1
|
+
**OnCollisionStay()関数部**ですがカプセルコライダーと当たった場所を検出してそれの座標を使って**平面ベクトルを求めて**その値のY座標のプレイヤー移動変数の**move.y**に入れて使っていますが ここで問題が発生していまして**「斜面を下がる時に下がりはしますが平面に沿って移動してくれません。」** の原因が知りたいです。
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
条件分岐のif文に[もし移動中だったら]というif文を作り移動中じゃなかったらelse move.y = 0;という処理を作ったのですが上手く実行されず
|
10
|
-
|
11
|
-
またその原因と実装法が知りたい。 ////ここですのコード部
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
##試したこと
|
20
|
-
|
21
|
-
Get.Axis()は0.1から1.0までの値が出るのでゼロじゃないときだからという形でif文を作ったのですが違いました move_direction
|
22
|
-
|
23
|
-
|
3
|
+
質問2、平面ベクトルは上手く求められてますでしょうか?
|
24
4
|
|
25
5
|
|
26
6
|
|
@@ -40,6 +20,46 @@
|
|
40
20
|
|
41
21
|
|
42
22
|
|
23
|
+
/* Ik 関係
|
24
|
+
|
25
|
+
Vector3 rightFootPos = new Vector3(0, 0, 0);
|
26
|
+
|
27
|
+
Vector3 leftFootPos = new Vector3(0, 0, 0);
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
Quaternion rightFootRot = new Quaternion(0, 0, 0, 0);
|
32
|
+
|
33
|
+
Quaternion leftFootRot = new Quaternion(0, 0, 0, 0);
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
bool isRightFootIK = false;
|
38
|
+
|
39
|
+
bool isLeftFootIK = false;
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
float RightIkWeight = 0;
|
44
|
+
|
45
|
+
float LeftIkWeight = 0;
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
Vector3 rayPositionOffset = new Vector3(0, 0, 0);
|
50
|
+
|
51
|
+
float rayRange = 1.0f;
|
52
|
+
|
53
|
+
float offset = 0.1f;
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
*/
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
43
63
|
private float input_h;
|
44
64
|
|
45
65
|
private float input_v;
|
@@ -68,6 +88,8 @@
|
|
68
88
|
|
69
89
|
|
70
90
|
|
91
|
+
private Vector3 planeVec;//平面ベクトル
|
92
|
+
|
71
93
|
|
72
94
|
|
73
95
|
GameObject ground_ray;
|
@@ -234,41 +256,65 @@
|
|
234
256
|
|
235
257
|
|
236
258
|
|
259
|
+
// Debug.Log("move_direction: " + move_direction);
|
260
|
+
|
261
|
+
// Debug.Log("move : " + move);
|
262
|
+
|
263
|
+
|
264
|
+
|
265
|
+
|
266
|
+
|
267
|
+
// Debug.Log(" update move.y: " + move.y);
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
}
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
//////////////////////////////////////////////////////////////////////////////////////////////
|
280
|
+
|
281
|
+
void FixedUpdate()
|
282
|
+
|
283
|
+
{
|
284
|
+
|
285
|
+
|
286
|
+
|
237
287
|
Gravity_Mng();
|
238
288
|
|
239
289
|
Move_Mng();
|
240
290
|
|
241
291
|
|
242
292
|
|
293
|
+
// rb.AddForce(move.x, move.y, move.z);
|
294
|
+
|
243
|
-
Debug.Log("move_direction: " + move_direction);
|
295
|
+
// Debug.Log("move_direction: " + move_direction);
|
244
|
-
|
296
|
+
|
245
|
-
Debug.Log("move
|
297
|
+
Debug.Log("move" + getSpeed());
|
298
|
+
|
299
|
+
|
300
|
+
|
246
|
-
|
301
|
+
/*
|
302
|
+
|
247
|
-
|
303
|
+
if (move_direction != Vector3.zero){
|
304
|
+
|
248
|
-
|
305
|
+
move.y = planeVec.y;
|
249
|
-
|
250
|
-
|
306
|
+
|
251
|
-
|
307
|
+
Debug.Log("v: " + planeVec.y);
|
308
|
+
|
252
|
-
|
309
|
+
}else{
|
310
|
+
|
253
|
-
|
311
|
+
move.y = 0;
|
254
|
-
|
255
|
-
|
256
|
-
|
312
|
+
|
257
|
-
}
|
313
|
+
}
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
314
|
+
|
264
|
-
|
265
|
-
|
315
|
+
*/
|
266
|
-
|
267
|
-
|
316
|
+
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
317
|
+
|
272
318
|
|
273
319
|
rb.AddForce(move.x,move.y,move.z);
|
274
320
|
|
@@ -288,66 +334,68 @@
|
|
288
334
|
|
289
335
|
|
290
336
|
|
291
|
-
|
292
|
-
|
293
337
|
// Debug.Log("OnCollisionStay: " + collision.contacts[0].point);
|
294
338
|
|
295
339
|
contacts.transform.position = collision.contacts[0].point;
|
296
340
|
|
341
|
+
// Debug.Log(collision.contacts[0].point);
|
342
|
+
|
297
343
|
// Debug.Log("あああああ");
|
298
344
|
|
345
|
+
|
346
|
+
|
347
|
+
|
348
|
+
|
299
349
|
Vector3 f = transform.forward;
|
300
350
|
|
301
351
|
Vector3 vv = collision.contacts[0].normal;
|
302
352
|
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
353
|
Vector3 dir = f - Vector3.Dot(f, vv) * vv;
|
308
354
|
|
309
355
|
|
310
356
|
|
311
|
-
f = dir.normalized * walk_speed;//y軸だけ使う
|
357
|
+
// f = dir.normalized * walk_speed;//y軸だけ使う
|
358
|
+
|
312
|
-
|
359
|
+
// planeVec = dir.normalized * walk_speed;
|
360
|
+
|
313
|
-
|
361
|
+
// planeVec = dir.normalized * getSpeed();
|
362
|
+
|
314
|
-
|
363
|
+
planeVec = dir.normalized * getSpeed();
|
364
|
+
|
315
|
-
|
365
|
+
move.y = planeVec.y;
|
316
|
-
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
|
372
|
+
|
317
|
-
|
373
|
+
// Debug.Log("move.y: " + move.y);
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
|
378
|
+
|
318
|
-
|
379
|
+
}
|
380
|
+
|
381
|
+
|
382
|
+
|
319
|
-
|
383
|
+
private void OnCollisionExit(Collision c)
|
320
|
-
|
384
|
+
|
321
|
-
|
385
|
+
{
|
322
|
-
|
323
|
-
|
386
|
+
|
324
|
-
|
325
|
-
move.y = f.y;
|
326
|
-
|
327
|
-
}else{
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
move.y = 0;
|
332
|
-
|
333
|
-
|
387
|
+
// move.y = -200.0f;
|
334
|
-
|
335
|
-
|
388
|
+
|
336
|
-
|
337
|
-
|
389
|
+
}
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
390
|
+
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
391
|
+
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
|
350
396
|
|
351
397
|
}
|
352
398
|
|
399
|
+
|
400
|
+
|
353
401
|
```
|
2
タイトルを編集
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
平面ベクトルを求めてそれを使うための処理が実装できない実装方法が知りたい。
|
test
CHANGED
File without changes
|
1
文章とタイトルを編集
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
移動していない時はy軸を0にしたいが上手く実装できない。
|
1
|
+
移動していない時はy軸を0にしたいが上手く実装できない。if文の処理が知りたい
|
test
CHANGED
@@ -1,10 +1,34 @@
|
|
1
|
-
OnCollisionStay()関数部
|
1
|
+
OnCollisionStay()関数部の処理で動いてないときはmove.y = 0;にして例えば斜面を上に登っているときはmove.y = 0;にすることによって上に上昇することを防ぐプログラムにしたい。また斜面を下る時も下がれるコードつまり平面ベクトルに進む移動処理を実現したい。
|
2
|
+
|
3
|
+
|
4
|
+
|
2
|
-
|
5
|
+
**質問**
|
6
|
+
|
7
|
+
|
8
|
+
|
3
|
-
|
9
|
+
条件分岐のif文に[もし移動中だったら]というif文を作り移動中じゃなかったらelse move.y = 0;という処理を作ったのですが上手く実行されず
|
10
|
+
|
4
|
-
|
11
|
+
またその原因と実装法が知りたい。 ////ここですのコード部
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
5
|
-
|
19
|
+
##試したこと
|
20
|
+
|
6
|
-
|
21
|
+
Get.Axis()は0.1から1.0までの値が出るのでゼロじゃないときだからという形でif文を作ったのですが違いました move_direction
|
22
|
+
|
23
|
+
また移動速度であるmove変数で移動中だったらつまり0じゃないときということでもif文を作りましたが違いました
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
7
|
-
```ここに言語を入力
|
31
|
+
```ここに言語名を入力
|
8
32
|
|
9
33
|
using UnityEngine;
|
10
34
|
|
@@ -216,11 +240,15 @@
|
|
216
240
|
|
217
241
|
|
218
242
|
|
219
|
-
|
243
|
+
Debug.Log("move_direction: " + move_direction);
|
244
|
+
|
220
|
-
|
245
|
+
Debug.Log("move : " + move);
|
221
|
-
|
222
|
-
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
|
250
|
+
|
223
|
-
Debug.Log(" update move.y: " + move.y);
|
251
|
+
// Debug.Log(" update move.y: " + move.y);
|
224
252
|
|
225
253
|
|
226
254
|
|
@@ -244,8 +272,6 @@
|
|
244
272
|
|
245
273
|
rb.AddForce(move.x,move.y,move.z);
|
246
274
|
|
247
|
-
Debug.Log(" Fixed move.y: " + move.y);
|
248
|
-
|
249
275
|
|
250
276
|
|
251
277
|
}
|
@@ -288,10 +314,14 @@
|
|
288
314
|
|
289
315
|
|
290
316
|
|
291
|
-
if (Mathf.Abs(move.z + move.x) > 0)
|
317
|
+
// if (Mathf.Abs(move.z + move.x) > 0)
|
318
|
+
|
319
|
+
if (move_direction != Vector3.zero)////////////////////////////////ここです。
|
292
320
|
|
293
321
|
{
|
294
322
|
|
323
|
+
Debug.Log("移動中");
|
324
|
+
|
295
325
|
move.y = f.y;
|
296
326
|
|
297
327
|
}else{
|
@@ -302,7 +332,7 @@
|
|
302
332
|
|
303
333
|
//rb.velocity = new Vector3(rb.velocity.x,0,rb.velocity.z);
|
304
334
|
|
305
|
-
|
335
|
+
Debug.Log("停止中");
|
306
336
|
|
307
337
|
}
|
308
338
|
|
@@ -314,10 +344,10 @@
|
|
314
344
|
|
315
345
|
|
316
346
|
|
347
|
+
|
348
|
+
|
317
349
|
}
|
318
350
|
|
319
351
|
}
|
320
352
|
|
321
|
-
|
322
|
-
|
323
353
|
```
|