質問編集履歴

3

文章をわかりやすく編集しました。

2019/10/31 10:06

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 坂道上がるとyの値の正方法が知りたい
1
+ 坂道る時下がる時でY軸の値の正方法が知りたい"下がる場合"
test CHANGED
@@ -1,4 +1,14 @@
1
- 画像ように平地から坂道を上りキを離と上に上がってしまい坂道を下がると動いてから下下がるという順を追った動きになってしまい原因がわかりません。void FxiedUpdate内だと思われるですが特に変わったことしておりません。これは何が原因なのでしょうか?カプセルコライダーとRigidbodyを使っています。ま重力落下の処理を入れたいのでy軸のAddForce処理は外したくありません。
1
+ 提示コード//////コメント中のコドで坂道をった処理if文完成したいのですが
2
+
3
+
4
+
5
+ 質問1 "坂を下る時"の処理の実装方法が知りたいです。
6
+
7
+ 質問2 坂道を上に登る時と下る時の処理を分ける分岐の実装法が知りたいまた、坂道で斜めに進む時動けなくなるのでその辺も考慮した処理の実装法が知りたい
8
+
9
+ 質問4 平地から坂道の上ろうとすると引っ掛かって登れない原因が知りたい
10
+
11
+
2
12
 
3
13
 
4
14
 
@@ -22,6 +32,8 @@
22
32
 
23
33
  {
24
34
 
35
+
36
+
25
37
  const float walk_speed_max = 20.0f;
26
38
 
27
39
 
@@ -62,6 +74,8 @@
62
74
 
63
75
  private Transform StepHit;
64
76
 
77
+ private RaycastHit downRay;
78
+
65
79
  private Transform Hit;
66
80
 
67
81
  private RaycastHit ray;
@@ -78,7 +92,7 @@
78
92
 
79
93
 
80
94
 
81
- // 昇れる角度
95
+ //坂道の角度登れる
82
96
 
83
97
  private float slopeLimit = 65f;
84
98
 
@@ -100,64 +114,92 @@
100
114
 
101
115
  { //y軸は逆にしてるプラスが下
102
116
 
117
+ Debug.DrawLine(StepHit.position, StepHit.position + StepHit.right * ray_range, Color.red);
118
+
103
- Debug.DrawLine(transform.position + new Vector3(0f, stepOffset, 0f),
119
+ Debug.DrawLine(StepHit.position, StepHit.position + StepHit.forward * ray_range, Color.blue);
104
-
105
- transform.position + new Vector3(0f, stepOffset, 0f) + transform.forward * slopeDistance
106
-
107
- , Color.green);
108
-
109
- // Debug.Log(transform.forward * slopeDistance);
110
-
111
-
112
120
 
113
121
  float s = Mathf.Sqrt((move.x * move.x) + (move.z * move.z));
114
122
 
115
123
 
116
124
 
117
- if (isGround == true && s > 0)
125
+ if (s > 0 && isGround == true)
118
-
126
+
119
- {
127
+ {
128
+
120
-
129
+ if (Physics.Linecast(StepHit.position, StepHit.position + StepHit.forward * ray_range, out ray,LayerMask.GetMask("Slope")))
130
+
121
- if (Physics.Linecast(StepHit.position, StepHit.position + StepHit.forward * ray_range, out ray))
131
+ // if (Physics.Linecast(StepHit.position, StepHit.position + StepHit.forward * ray_range, out ray))
132
+
133
+
122
134
 
123
135
  {
124
136
 
125
-
137
+ //Debug.Log(Vector3.Angle(transform.up, ray.normal));
126
-
127
-
128
-
138
+
139
+
140
+
129
- if (Vector3.Angle(transform.up, ray.normal) <= slopeLimit)
141
+ if (Vector3.Angle(transform.up, ray.normal) <= slopeLimit)
130
142
 
131
143
  {
132
144
 
133
145
 
134
146
 
135
-
136
-
137
147
  v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, ray.normal) * transform.forward * s).y, 0f)
138
148
 
139
149
  + transform.forward * s;
140
150
 
141
- // move.y = v.y;
151
+ Debug.Log("上がる"+v.y);
142
-
152
+
143
- isRay = true;
153
+ move.y += v.y;
154
+
155
+
144
156
 
145
157
  }
146
158
 
159
+
160
+
161
+ //////////////////////////////////////////////////////////////////////////////////////////////////////
162
+
163
+ } else if (Physics.Linecast(StepHit.position, StepHit.position + StepHit.right * ray_range, out downRay, LayerMask.GetMask("Slope")))
164
+
147
- else
165
+ {
166
+
167
+
168
+
169
+ Debug.Log(Vector3.Angle(transform.up, downRay.normal));
170
+
171
+
172
+
173
+ if (Vector3.Angle(transform.up, downRay.normal) <= slopeLimit)
148
174
 
149
175
  {
150
176
 
177
+ Debug.Log("下がる");
178
+
179
+ v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, ray.normal) * transform.forward * s).y, 0f)
180
+
181
+ + transform.up * s;
182
+
183
+
184
+
151
- // move.y = 0;
185
+ Debug.Log("下がる:" + v.y);
152
-
186
+
153
- //move += transform.forward * move_speed;
187
+ move.y += -v.y;
188
+
189
+
154
190
 
155
191
  }
156
192
 
157
193
 
158
194
 
195
+ // Debug.Log("下がるとき");
196
+
197
+
198
+
159
199
  }
160
200
 
201
+ //////////////////////////////////////////////////////////////////////////////////////////////////////
202
+
161
203
  }
162
204
 
163
205
  }
@@ -174,7 +216,7 @@
174
216
 
175
217
  rb = GetComponent<Rigidbody>();
176
218
 
177
- // spt_g = gGround.GetComponent<ground>();
219
+ spt_g = gGround.GetComponent<ground>();
178
220
 
179
221
  ani = GetComponent<Animator>();
180
222
 
@@ -196,9 +238,73 @@
196
238
 
197
239
  {
198
240
 
241
+ //Debug.Log(transform.up);
242
+
243
+ // Debug.Log(transform.right);
244
+
245
+
246
+
247
+ isGround = spt_g.isGround;
248
+
249
+ // Debug.Log(isGround);
250
+
199
- input_h = Input.GetAxis("Horizontal");
251
+ //input_h = Input.GetAxis("Horizontal");
200
-
252
+
201
- input_v = Input.GetAxis("Vertical");
253
+ //input_v = Input.GetAxis("Vertical");
254
+
255
+
256
+
257
+ if(Input.GetKey(KeyCode.LeftArrow))
258
+
259
+ {
260
+
261
+ input_h = -1;
262
+
263
+ }else if (Input.GetKey(KeyCode.RightArrow))
264
+
265
+ {
266
+
267
+ input_h = 1;
268
+
269
+ }
270
+
271
+ else
272
+
273
+ {
274
+
275
+ input_h = 0;
276
+
277
+ }
278
+
279
+
280
+
281
+
282
+
283
+ if (Input.GetKey(KeyCode.UpArrow))
284
+
285
+ {
286
+
287
+ input_v = 1;
288
+
289
+ }
290
+
291
+ else if (Input.GetKey(KeyCode.DownArrow))
292
+
293
+ {
294
+
295
+ input_v = -1;
296
+
297
+ }
298
+
299
+ else
300
+
301
+ {
302
+
303
+ input_v = 0;
304
+
305
+ }
306
+
307
+
202
308
 
203
309
  move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v;
204
310
 
@@ -212,7 +318,7 @@
212
318
 
213
319
 
214
320
 
215
-
321
+ // Debug.Log(isRay);
216
322
 
217
323
  if (move != Vector3.zero)
218
324
 
@@ -222,7 +328,7 @@
222
328
 
223
329
  }
224
330
 
225
-
331
+ //
226
332
 
227
333
  /*走る*/
228
334
 
@@ -264,6 +370,8 @@
264
370
 
265
371
  }
266
372
 
373
+
374
+
267
375
  move_step();
268
376
 
269
377
  Animation_Mng();
@@ -290,88 +398,74 @@
290
398
 
291
399
 
292
400
 
401
+
402
+
403
+
404
+
405
+
406
+
293
407
  private void FixedUpdate()
294
408
 
409
+ {
410
+
411
+ if (isGround == false)
412
+
413
+ {
414
+
415
+ rb.AddForce(new Vector3(0, -30.0f, 0));
416
+
417
+ rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
418
+
419
+ }
420
+
421
+ else
422
+
423
+ {
424
+
425
+ rb.velocity = new Vector3(move.x, move.y, move.z);
426
+
427
+ }
428
+
429
+ }
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+ private void OnCollisionEnter(Collision c)
438
+
295
439
  {
296
440
 
297
- // rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
441
+
298
-
299
-
300
-
301
-
302
-
442
+
303
- if(isJump == true)
443
+ //isGround = true;
304
-
305
- {
444
+
306
-
307
- //rb.AddForce(rb.velocity.x,jump_force,rb.velocity.z);
445
+
308
-
309
- isJump = false;
446
+
310
-
447
+
448
+
311
- }
449
+ }
312
-
313
-
314
-
315
- if (isGround == false)
450
+
316
-
317
- {
451
+
318
-
319
-
320
-
321
- }
452
+
322
-
323
- else
324
-
325
- {
326
-
327
-
328
-
329
- }
330
-
331
-
332
-
333
- rb.AddForce(new Vector3(0, -10.0f, 0));
334
-
335
-
336
-
337
- rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
338
-
339
-
340
-
341
-
342
-
343
- }
344
-
345
-
346
-
347
-
348
-
349
- private void OnCollisionEnter(Collision c)
453
+ private void OnCollisionExit(Collision c)
350
454
 
351
455
  {
352
456
 
353
- //isGround = true;
354
-
355
-
356
-
357
- // Debug.Log("プレイヤーcollision");
358
-
359
-
360
-
361
- }
362
-
363
-
364
-
365
- private void OnCollisionExit(Collision c)
366
-
367
- {
368
-
369
457
  //isGround = false;
370
458
 
459
+ // Debug.Log("プレイヤーcollision false");
460
+
461
+
462
+
371
463
  }
372
464
 
373
465
 
374
466
 
375
467
  }
376
468
 
469
+
470
+
377
471
  ```

2

文章を編集しました。

2019/10/31 10:06

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 坂道を上がりキーを離すと上に上がってしまい坂道を下ると動いてから下に下がるという謎挙動をしてしまう。原因が知りたい
1
+ 坂道を上がると値の修正方法が知りたい
test CHANGED
File without changes

1

文章を編集しました。

2019/10/27 16:14

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,4 @@
1
- 画像のように平地から坂道を上りキーを離すと上に上がってしまい坂道を下がると動いてから下に下がるという順を追った動きになってしまい
2
-
3
- 原因がわかりません。void FxiedUpdate内だと思われるのですが特に変わったことはしておりません。これは何が原因なのでしょうか?
4
-
5
- カプセルコライダーとRigidbodyを使っています。また重力落下の処理を入れたいのでy軸のAddForce処理は外したくありません。
1
+ 画像のように平地から坂道を上りキーを離すと上に上がってしまい坂道を下がると動いてから下に下がるという順を追った動きになってしまい原因がわかりません。void FxiedUpdate内だと思われるのですが特に変わったことはしておりません。これは何が原因なのでしょうか?カプセルコライダーとRigidbodyを使っています。また重力落下の処理を入れたいのでy軸のAddForce処理は外したくありません。
6
2
 
7
3
 
8
4