質問編集履歴

5

提示画像を追加。

2020/02/16 06:03

投稿

退会済みユーザー
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

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

2020/02/16 06:03

投稿

退会済みユーザー
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

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

2020/02/16 05:59

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,26 +1,6 @@
1
- OnCollisionStay()関数部の処理動いてないきはmove.y = 0;にして例えば斜面上に登っているときはmove.y = 0;することによって上に上昇とを防ぐプログラムに斜面を下る時下がれるコードつ平面ベクトル進む移動処理を実現したい。
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
- また移動速度であるmove変数で移動中だったり0じゃないときということもif文を作りまたが違いました
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 : " + 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
- // Debug.Log(" update move.y: " + move.y);
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
- void FixedUpdate()
315
+ */
266
-
267
- {
316
+
268
-
269
-
270
-
271
- // rb.AddForce(move.x, move.y, move.z);
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
- // if (Mathf.Abs(move.z + move.x) > 0)
373
+ // Debug.Log("move.y: " + move.y);
374
+
375
+
376
+
377
+
378
+
318
-
379
+ }
380
+
381
+
382
+
319
- if (move_direction != Vector3.zero)////////////////////////////////ここです。
383
+ private void OnCollisionExit(Collision c)
320
-
384
+
321
- {
385
+ {
322
-
323
- Debug.Log("移動中");
386
+
324
-
325
- move.y = f.y;
326
-
327
- }else{
328
-
329
-
330
-
331
- move.y = 0;
332
-
333
- //rb.velocity = new Vector3(rb.velocity.x,0,rb.velocity.z);
387
+ // move.y = -200.0f;
334
-
335
- Debug.Log("停止中");
388
+
336
-
337
- }
389
+ }
338
-
339
-
340
-
341
-
342
-
343
- Debug.Log("move.y: " + move.y);
390
+
344
-
345
-
346
-
347
-
348
-
349
- }
391
+
392
+
393
+
394
+
395
+
350
396
 
351
397
  }
352
398
 
399
+
400
+
353
401
  ```

2

タイトルを編集

2020/02/16 05:32

投稿

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

1

文章とタイトルを編集

2020/02/16 05:18

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 移動していない時はy軸を0にしたいが上手く実装できない。
1
+ 移動していない時はy軸を0にしたいが上手く実装できない。if文の処理が知りたい
test CHANGED
@@ -1,10 +1,34 @@
1
- OnCollisionStay()関数部のですがぜキーを離してる時にmove.y = 0;と表示されるずなのですがmove.yがプラスの値ってしまい上昇するのでょうか?
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
  ```