質問編集履歴

7

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

2020/02/15 07:35

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Unity3D 斜面を空中てしまうバグ修正方法が知りたい。
1
+ Unity3D 斜面の上り下り正確に実装するにはどうすればいいのか?
test CHANGED
@@ -1,14 +1,14 @@
1
- タイトル通りですが**「坂道で下がる処理を実装」**したいです。
2
-
3
1
  坂道を上がり下がりする時のY軸の移動量をする処理がSlope_Mng()関数のコードです。提示画像の線がRayです。
4
2
 
5
3
 
6
4
 
7
- 困っていること、提示画像のようにRayを2方向に飛ばし緑のRayは下がる時に斜面に当たりY軸の移動量を計算しているのですが提示画像2、3、番目のように動いているときと止まっているときで微妙に浮いてしまってキーを離したときにY軸が下がってしまったり、斜面を下がり続けるとだんだん空中に浮いてしまい斜面を下り終えると空中にその分浮いてしまいます。これはどうすればいいのでしょうか?
5
+ 質問1、困っていること、提示画像のようにRayを2方向に飛ばし緑のRayは下がる時に斜面に当たりY軸の移動量を計算しているのですが提示画像2、3、番目のように動いているときと止まっているときで微妙に浮いてしまってキーを離したときにY軸が下がってしまったり、斜面を下がり続けるとだんだん空中に浮いてしまい斜面を下り終えると空中にその分浮いてしまいます。これはどうすればいいのでしょうか?
8
-
9
-
10
-
6
+
7
+
8
+
11
- またRayの場所や長さはこれいいのか?そもそも実装法が正しいのかどうかなど知りたいです。
9
+ 質問2、またRayの場所や長さはこれいいのか?そもそも実装法が正しいのかどうかなど知りたいです。
10
+
11
+ 質問3、プロだったらどう実装するのか知りたい
12
12
 
13
13
 
14
14
 

6

タイトルを編集しました。

2020/02/15 07:35

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Unity3D 斜面を上がりがり処理を実装で微調整する方法が知りたい
1
+ Unity3D 斜面を下る時に空中い浮いてしまうバグの修正方法が知りたい
test CHANGED
File without changes

5

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

2020/02/15 07:08

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Unity3D 斜面を下がりする処理をりたい、調べましたが...
1
+ Unity3D 斜面を上がり下がり処理を実装で微調整する方法が知りたい
test CHANGED
@@ -1,14 +1,20 @@
1
- タイトル通りですが**「坂道で下がったりする処理を実装」**したいです。
1
+ タイトル通りですが**「坂道で下がる処理を実装」**したいです。
2
-
2
+
3
- 坂道を上がったり下がったりする時のY軸の移動量をする処理がSlope_Mng()関数のコードです。提示画像の青い線がRayです。
3
+ 坂道を上がり下がりする時のY軸の移動量をする処理がSlope_Mng()関数のコードです。提示画像の線がRayです。
4
-
5
-
6
-
7
- 実現したいこと、 提示画像のように坂道を下る時に空中に居ないように**地面にくっついて移動したい。**
4
+
8
-
9
-
10
-
5
+
6
+
11
- 困っていること、理由で上手くいのか?そもそもこ数式は正しのか知りたいです。またなぜ浮いてしまうのか?何が違うのか知りいです。おそらく速度だ思われるのですspeedけている分はどうすればいいのでしょうか?
7
+ 困っていること、提示画像のようにRayを2方向に飛ばし緑のRayは下る時に斜面に当たりY軸の移量を計算していですが提示画像2、3、番目ように動るときと止まっているとき微妙に浮いてしまってキーを離したときにY軸下がってしまったり、斜面下がり続るとだんだん空中に浮いしま斜面を下り終えと空中にその浮いてしまいます。これはどうすればいいのでしょうか?
8
+
9
+
10
+
11
+ またRayの場所や長さはこれいいのか?そもそも実装法が正しいのかどうかなど知りたいです。
12
+
13
+
14
+
15
+
16
+
17
+
12
18
 
13
19
 
14
20
 
@@ -20,13 +26,11 @@
20
26
 
21
27
 
22
28
 
23
-
29
+ ![イメージ説明](5a4bace461944f0fac13f6c338e4ec06.png)
30
+
24
-
31
+ ![イメージ説明](884f3c61b5bebf451abd7f4bebb59974.png)
25
-
26
-
32
+
27
- ![イメージ説明](8d0cf592b918db0b67ed58b5f1c20a65.png)
33
+ ![イメージ説明](dcf3fed74b9e39cc4be442affa076c0e.png)
28
-
29
-
30
34
 
31
35
  ```ここに言語を入力
32
36
 
@@ -84,11 +88,21 @@
84
88
 
85
89
  [SerializeField]
86
90
 
91
+ float slope_range;
92
+
93
+ [SerializeField]
94
+
87
- Vector3 slope_range = new Vector3(0, 0, 0);
95
+ Vector3 slope_direc = new Vector3(0, 0, 0);
96
+
88
-
97
+ [SerializeField]
98
+
89
-
99
+ Vector3 slope_direc_b = new Vector3(0, 0, 0);
100
+
101
+
102
+
90
-
103
+ // [SerializeField]
104
+
91
-
105
+ Vector3 slope_pos;
92
106
 
93
107
  // Use this for initialization
94
108
 
@@ -102,7 +116,11 @@
102
116
 
103
117
  Slope = GameObject.Find("SlopeCheck");
104
118
 
119
+
120
+
121
+ Slope.transform.position = slope_pos + Slope.transform.position;
122
+
105
- walk_speed = 5.0f;
123
+ walk_speed = 100;
106
124
 
107
125
  gravity = Vector3.zero;
108
126
 
@@ -144,31 +162,73 @@
144
162
 
145
163
 
146
164
 
147
- Vector3 forward = transform.forward + slope_range;
165
+ //Vector3 forward = Slope.transform.forward + slope_range;
166
+
167
+
168
+
148
-
169
+ Vector3 forward = (Slope.transform.forward + slope_direc) * slope_range;
170
+
171
+ Vector3 forward_b = (Slope.transform.forward + slope_direc_b) * slope_range;
172
+
173
+
174
+
149
- Debug.DrawLine(Slope.transform.position, Slope.transform.position + forward ,Color.blue);
175
+ Debug.DrawLine(Slope.transform.position, Slope.transform.position + forward, Color.blue);
176
+
150
-
177
+ Debug.DrawLine(Slope.transform.position, Slope.transform.position + forward_b ,Color.green);
178
+
151
- float speed = Mathf.Sqrt((move.x * move.x) + (move.z * move.z));
179
+ // float speed = Mathf.Sqrt((move.x * move.x) + (move.z * move.z));
180
+
181
+
182
+
183
+
184
+
185
+
186
+
152
-
187
+ // float speed = Mathf.Abs(Mathf.Sqrt((move.x * move.x) + (move.z * move.z)));
153
-
154
-
188
+
155
- if(speed != 0){
189
+ float speed = 100;
190
+
191
+
192
+
193
+ Debug.Log("speed: " + speed);
194
+
195
+
196
+
197
+ if(move != Vector3.zero){
156
198
 
157
199
  if(Physics.Linecast(Slope.transform.position, Slope.transform.position + forward, out hit,LayerMask.GetMask("Slope")) == true)
158
200
 
159
201
  {
160
202
 
161
- Debug.Log("坂道のRayヒット!");
162
-
163
203
 
164
204
 
165
205
  v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * speed).y, 0f) + transform.forward * speed;
166
206
 
167
- Debug.Log("v.y: "+ v.y);
207
+ //Debug.Log("v.y: "+ v.y);
208
+
209
+ Debug.Log("坂道のRayヒット! 上がる" + v.y);
210
+
211
+
212
+
213
+ }else if(Physics.Linecast(Slope.transform.position, Slope.transform.position + forward_b, out hit, LayerMask.GetMask("Slope")) == true)
214
+
215
+ {
216
+
217
+ v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * speed).y, 0f) + transform.forward * speed;
218
+
219
+ //Debug.Log("v.y: "+ v.y);
220
+
221
+ Debug.Log("坂道のRayヒット! 下がる" + v.y);
222
+
223
+ }else{
224
+
225
+ v.y = 0;
168
226
 
169
227
  }
170
228
 
229
+ }
230
+
171
- }else{
231
+ else{
172
232
 
173
233
  v.y = 0;
174
234
 
@@ -192,46 +252,36 @@
192
252
 
193
253
  input_v = Input.GetAxis("Vertical");
194
254
 
195
-
196
-
197
-
198
-
199
-
200
-
201
255
  Vector3 move_z = new Vector3();
202
256
 
203
257
  Vector3 move_x = new Vector3();
204
258
 
205
- move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v ;//* walk_speed;
259
+ move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v;
206
-
260
+
207
- move_x = Camera.main.transform.right * input_h; //* walk_speed;
261
+ move_x = Camera.main.transform.right * input_h;
208
262
 
209
263
  move = move_x + move_z;
210
264
 
211
265
 
212
266
 
213
-
214
-
215
-
216
-
217
-
218
-
219
- move.x *= 200;
220
-
221
- move.z *= 200;
222
-
223
-
224
-
225
-
226
-
227
267
  if (move != Vector3.zero)
228
268
 
229
269
  {
230
270
 
271
+ move.y = 0;
272
+
231
273
  transform.rotation = Quaternion.LookRotation(move.normalized);
232
274
 
233
275
  }
234
276
 
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
235
285
  }
236
286
 
237
287
 
@@ -252,11 +302,23 @@
252
302
 
253
303
 
254
304
 
305
+
306
+
307
+ // Debug.Log("velocity: " + Mathf.Sqrt((rb.velocity.x * rb.velocity.x) + (rb.velocity.z * rb.velocity.z)));
308
+
309
+
310
+
311
+ Debug.Log("velocity: " + rb.velocity);
312
+
313
+ move *= 100;
314
+
315
+
316
+
255
- }
317
+ }
256
-
257
-
258
-
259
-
318
+
319
+
320
+
321
+
260
322
 
261
323
  //////////////////////////////////////////////////////////////////////////////////////////////
262
324
 
@@ -266,15 +328,15 @@
266
328
 
267
329
 
268
330
 
331
+
332
+
269
- // rb.velocity = new Vector3(move.x, 0, move.z);
333
+ // rb.AddForce(move.x, v.y, move.z);
270
-
271
-
272
334
 
273
335
  rb.AddForce(move.x, v.y, move.z);
274
336
 
275
337
 
276
338
 
277
- // Debug.Log("velocity: " + rb.velocity.magnitude);
339
+
278
340
 
279
341
  }
280
342
 

4

文章を修正

2020/02/15 06:19

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Unity3D 斜面を上がり下がりする処理を作りたい
1
+ Unity3D 斜面を下がりする処理を作りたい、調べましたが...
test CHANGED
@@ -1,124 +1,290 @@
1
+ タイトル通りですが**「坂道で下がったりする処理を実装」**したいです。
2
+
1
- 坂道を上がったり下がったりする時に平地と同じ速度で上がり下がりする処理を作りたいです。
3
+ 坂道を上がったり下がったりする時のY軸の移動量をする処理がSlope_Mng()関数のコードです。提示画像の青線がRayです。
2
-
3
-
4
-
4
+
5
+
6
+
5
- 質問1、提示画像のよう坂をる時にと同じ速度で上がるときyの上昇量を計算してますがこれは上手く実装できているのでしょうか?
7
+ 実現したいこと 提示画像のようる時に空中に居ないように**くっついて移動した。**
6
-
7
-
8
-
8
+
9
+
10
+
9
- 質問2、坂道を下るときに重力をつける処を実装していても動らY軸が下がってうまく実装せんどうすればいのでうか?自分ないに考え結果坂道を上る時と同じYの上昇量をマイナスにれば坂道を下がる時Y軸が下がってくれるのではと考えたのですが上手くきません。どうすればいいのでしょうか?
11
+ 困ってい、何が由で上手く動いて?そもそもこの数式は正しいのか知りたいす。たなぜ浮か?何が違うのか知りたです。おそら速度だと思われるのですがspeedをかけてる部分はどうすればいいのでしょうか?
12
+
13
+
14
+
15
+
16
+
17
+
18
+
10
-
19
+ 参考サイト: https://gametukurikata.com/program/rigidbodyandcollider
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
20
+
21
+
22
+
23
+
24
+
25
+
26
+
19
- ![イメージ説明](dc3dfee2a2a531026e1e2beac854de30.png)
27
+ ![イメージ説明](8d0cf592b918db0b67ed58b5f1c20a65.png)
20
-
21
-
22
-
23
- use gravity をオンにした時の場合 空中に浮いてから下がってしまうため目的の処理を実現できない
28
+
24
-
25
- ![イメージ説明](09ab9cb36375a98943857209a262a57b.png)
29
+
26
30
 
27
31
  ```ここに言語を入力
28
32
 
29
-
33
+ using System.Collections;
30
-
31
-
32
-
34
+
33
- void Slope_Mng()//坂道を上る時
35
+ using System.Collections.Generic;
36
+
34
-
37
+ using UnityEngine;
38
+
39
+
40
+
41
+ public class Controller : MonoBehaviour
42
+
35
- {
43
+ {
44
+
45
+
46
+
36
-
47
+ private float input_h;
48
+
37
-
49
+ private float input_v;
50
+
38
-
51
+ private Vector3 move;
52
+
53
+ private Rigidbody rb;
54
+
55
+ private float walk_speed;//移動速度
56
+
57
+ private Animator ani;//移動速度
58
+
59
+ private Vector3 gravity;
60
+
61
+ private bool isJump = false;//ジャンプしてるかどうかを管理する
62
+
63
+ private Vector3 v;
64
+
65
+ private bool isDush;
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+ GameObject Ground;
76
+
77
+
78
+
79
+ /*坂道計算*/
80
+
81
+ GameObject Slope;
82
+
83
+
84
+
85
+ [SerializeField]
86
+
87
+ Vector3 slope_range = new Vector3(0, 0, 0);
88
+
89
+
90
+
91
+
92
+
93
+ // Use this for initialization
94
+
95
+ void Start()
96
+
97
+ {
98
+
99
+
100
+
101
+ Ground = GameObject.Find("GroundCheck");
102
+
103
+ Slope = GameObject.Find("SlopeCheck");
104
+
39
- float range = 0.8f;
105
+ walk_speed = 5.0f;
106
+
40
-
107
+ gravity = Vector3.zero;
108
+
41
- Debug.DrawLine(Slope.transform.position, Slope.transform.position + (transform.forward * range), Color.blue);
109
+ rb = GetComponent<Rigidbody>();
42
-
110
+
43
- Debug.DrawLine(Ground.transform.position,Ground.transform.position + new Vector3(0, -1, 0),Color.blue);
111
+ ani = GetComponent<Animator>();
112
+
113
+
114
+
115
+
116
+
44
-
117
+ }
118
+
119
+
120
+
121
+
122
+
45
- //Debug.DrawLine(Slope.transform.position, Slope.transform.position + (transform.forward + new Vector3(0,-0.3f,0)), Color.blue);
123
+ void Gravity_Mng()//ジャンプ管理
124
+
125
+ {
126
+
127
+
128
+
129
+
130
+
131
+ }
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+ void Slope_Mng()//坂道
140
+
141
+ {
46
142
 
47
143
  RaycastHit hit;
48
144
 
49
145
 
50
146
 
51
- /*移動中の時*/
147
+ Vector3 forward = transform.forward + slope_range;
148
+
52
-
149
+ Debug.DrawLine(Slope.transform.position, Slope.transform.position + forward ,Color.blue);
150
+
151
+ float speed = Mathf.Sqrt((move.x * move.x) + (move.z * move.z));
152
+
153
+
154
+
53
- if(move != Vector3.zero){
155
+ if(speed != 0){
54
-
55
- v = Vector3.zero;
156
+
56
-
57
- if (Physics.Linecast(Slope.transform.position, Slope.transform.position + (transform.forward * range), out hit,LayerMask.GetMask("Slope")) == true)
157
+ if(Physics.Linecast(Slope.transform.position, Slope.transform.position + forward, out hit,LayerMask.GetMask("Slope")) == true)
58
158
 
59
159
  {
60
160
 
61
- Debug.Log("登っている。");
161
+ Debug.Log("坂道のRayヒット!");
62
-
162
+
163
+
164
+
63
- v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * walk_speed).y, 0f) + transform.forward * walk_speed;
165
+ v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * speed).y, 0f) + transform.forward * speed;
64
-
65
-
66
-
67
-
68
-
69
- }else if (Physics.Linecast(Ground.transform.position,Ground.transform.position + new Vector3(0,-1,0),out hit,LayerMask.GetMask("Slope")) == true){
166
+
70
-
71
- /*下がる時用*/
72
-
73
- Debug.Log("坂道を下がっているとき");
167
+ Debug.Log("v.y: "+ v.y);
74
-
75
- v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * walk_speed).y, 0f) + transform.forward * walk_speed;
76
-
77
- v.y = v.y * -1;
78
168
 
79
169
  }
80
170
 
171
+ }else{
172
+
173
+ v.y = 0;
174
+
81
175
  }
82
176
 
83
177
 
84
178
 
85
-
179
+ }
86
-
180
+
181
+
182
+
183
+
184
+
87
- /*確認用*/
185
+ void Move_Mng()
186
+
88
-
187
+ {
188
+
189
+
190
+
191
+ input_h = Input.GetAxis("Horizontal");
192
+
193
+ input_v = Input.GetAxis("Vertical");
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+ Vector3 move_z = new Vector3();
202
+
203
+ Vector3 move_x = new Vector3();
204
+
89
- if (Physics.Linecast(Slope.transform.position, Slope.transform.position + (transform.forward * range), out hit, LayerMask.GetMask("Slope")) == true)
205
+ move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v ;//* walk_speed;
206
+
207
+ move_x = Camera.main.transform.right * input_h; //* walk_speed;
208
+
209
+ move = move_x + move_z;
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+ move.x *= 200;
220
+
221
+ move.z *= 200;
222
+
223
+
224
+
225
+
226
+
227
+ if (move != Vector3.zero)
90
228
 
91
229
  {
92
230
 
93
- Debug.Log("登っている。");
94
-
95
- // v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * walk_speed).y, 0f) + transform.forward * walk_speed;
231
+ transform.rotation = Quaternion.LookRotation(move.normalized);
96
232
 
97
233
  }
98
234
 
99
-
100
-
101
- }
235
+ }
236
+
237
+
238
+
102
-
239
+ // Update is called once per frame
103
-
104
-
240
+
105
- void FixedUpdate () {
241
+ void Update()
242
+
106
-
243
+ {
107
-
108
-
244
+
245
+
246
+
109
- rb.velocity = new Vector3(rb.velocity.x,v.y, rb.velocity.z);
247
+ Gravity_Mng();
248
+
110
-
249
+ Slope_Mng();
250
+
111
- v.y = 0;
251
+ Move_Mng();
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
252
+
253
+
254
+
121
- }
255
+ }
256
+
257
+
258
+
259
+
260
+
261
+ //////////////////////////////////////////////////////////////////////////////////////////////
262
+
263
+ void FixedUpdate()
264
+
265
+ {
266
+
267
+
268
+
269
+ // rb.velocity = new Vector3(move.x, 0, move.z);
270
+
271
+
272
+
273
+ rb.AddForce(move.x, v.y, move.z);
274
+
275
+
276
+
277
+ // Debug.Log("velocity: " + rb.velocity.magnitude);
278
+
279
+ }
280
+
281
+ //////////////////////////////////////////////////////////////////////////////////////////////
282
+
283
+
284
+
285
+
286
+
287
+ }
122
288
 
123
289
 
124
290
 

3

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

2020/02/14 10:50

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -17,6 +17,12 @@
17
17
 
18
18
 
19
19
  ![イメージ説明](dc3dfee2a2a531026e1e2beac854de30.png)
20
+
21
+
22
+
23
+ use gravity をオンにした時の場合 空中に浮いてから下がってしまうため目的の処理を実現できない
24
+
25
+ ![イメージ説明](09ab9cb36375a98943857209a262a57b.png)
20
26
 
21
27
  ```ここに言語を入力
22
28
 

2

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

2020/02/11 12:29

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 坂道を上り下りする処理で地面にくっついて平地と同じ速度で移動する処理を作りたい。
1
+ Unity3D 斜面を上り下りする処理を作りたい。
test CHANGED
@@ -1,46 +1,102 @@
1
- 質問 3Dアクションゲームで坂道を上り下りするとき移動速度を一定にするため"平地と"にするためにはどうすればいのしょうか?
1
+ 坂道を上がったり下がったりするに平地と同じ度で上がり下がりする処理を作りたいです。
2
2
 
3
3
 
4
4
 
5
- 質問そもそも上る処理コードは正しいのでしょうか?0.4くらの値がv.yに入っているみたいですが....
5
+ 質問提示画像のような坂を上る時に平地と同じ速度で上がるときにy上昇量を計算ますがこれは上手く実装できているのでしょうか?
6
6
 
7
7
 
8
8
 
9
- 質問3,そもそもこのコードの書き方は正しいのか?(Updateに書いてしまっていうのは実験コードだからです。)
10
-
11
-
12
-
13
- 提示コードなのですがこれはプレイヤーの足元に子の空のオブジェクトを設定して坂道を上る時にRayを発射してそこに当たったらY軸の増加量を計算するという処理なのですが"上る処理"は完成しましたが **"下る処理"の実装方法がわかりません**
14
-
15
-
16
-
17
- ※ use gravityを使うと坂道を下るときに空中に浮いてから下に下がるという処理を行ってしまうため上手く実現できません。
18
-
19
- またAddForceなど使うそも動かなくなってしまいますbool型変数使って空中に居る時だけ、など判定処理をするuse gravityと同じぐらい処理ってしまうのでうま実現でず困っています
9
+ 質問2、坂道下るきに重力をつける処理を実装していても動いてらY軸が下がってしまいく実装できませんどうればいいのでしょうか?自分いりに考えた結果坂道る時と同じでYの上昇量をマイナスすれば坂道を下る時Y軸が下がってくれるのではと考えたのですが上手きません。どうればいいのでしょうか?
20
10
 
21
11
 
22
12
 
23
13
 
24
14
 
25
- ![イメージ説明](babaa5f37ae151780661298278de2bdf.png)
26
-
27
- ```ここに言語を入力
28
-
29
- void Update () {
30
-
31
- //Animation_Mng();
32
-
33
- //Gravity_Mng();
34
-
35
- //Attack_Mng();
36
-
37
- //Move_Mng();
38
-
39
- //Slope_Mng();
40
15
 
41
16
 
42
17
 
43
18
 
19
+ ![イメージ説明](dc3dfee2a2a531026e1e2beac854de30.png)
20
+
21
+ ```ここに言語を入力
22
+
23
+
24
+
25
+
26
+
27
+ void Slope_Mng()//坂道を上る時
28
+
29
+ {
30
+
31
+
32
+
33
+ float range = 0.8f;
34
+
35
+ Debug.DrawLine(Slope.transform.position, Slope.transform.position + (transform.forward * range), Color.blue);
36
+
37
+ Debug.DrawLine(Ground.transform.position,Ground.transform.position + new Vector3(0, -1, 0),Color.blue);
38
+
39
+ //Debug.DrawLine(Slope.transform.position, Slope.transform.position + (transform.forward + new Vector3(0,-0.3f,0)), Color.blue);
40
+
41
+ RaycastHit hit;
42
+
43
+
44
+
45
+ /*移動中の時*/
46
+
47
+ if(move != Vector3.zero){
48
+
49
+ v = Vector3.zero;
50
+
51
+ if (Physics.Linecast(Slope.transform.position, Slope.transform.position + (transform.forward * range), out hit,LayerMask.GetMask("Slope")) == true)
52
+
53
+ {
54
+
55
+ Debug.Log("登っている。");
56
+
57
+ v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * walk_speed).y, 0f) + transform.forward * walk_speed;
58
+
59
+
60
+
61
+
62
+
63
+ }else if (Physics.Linecast(Ground.transform.position,Ground.transform.position + new Vector3(0,-1,0),out hit,LayerMask.GetMask("Slope")) == true){
64
+
65
+ /*下がる時用*/
66
+
67
+ Debug.Log("坂道を下がっているとき");
68
+
69
+ v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * walk_speed).y, 0f) + transform.forward * walk_speed;
70
+
71
+ v.y = v.y * -1;
72
+
73
+ }
74
+
75
+ }
76
+
77
+
78
+
79
+
80
+
81
+ /*確認用*/
82
+
83
+ if (Physics.Linecast(Slope.transform.position, Slope.transform.position + (transform.forward * range), out hit, LayerMask.GetMask("Slope")) == true)
84
+
85
+ {
86
+
87
+ Debug.Log("登っている。");
88
+
89
+ // v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * walk_speed).y, 0f) + transform.forward * walk_speed;
90
+
91
+ }
92
+
93
+
94
+
95
+ }
96
+
97
+
98
+
99
+ void FixedUpdate () {
44
100
 
45
101
 
46
102
 
@@ -56,50 +112,6 @@
56
112
 
57
113
 
58
114
 
59
- //Debug.DrawLine(Slope.transform.position, Slope.transform.position + (transform.forward + new Vector3(0,-1,0)), Color.blue);
60
-
61
- Debug.DrawLine(Slope.transform.position, Slope.transform.position + (new Vector3(0,-0.5f,0)), Color.blue);
62
-
63
-
64
-
65
- // Debug.Log(transform.forward);
66
-
67
- RaycastHit hit;
68
-
69
- //if (Physics.Raycast(Slope.transform.position, transform.forward + new Vector3(0,-1,0), 0.3f, LayerMask.GetMask("Slope")) == true)
70
-
71
-
72
-
73
- if(move != Vector3.zero){
74
-
75
- if (Physics.Linecast(Slope.transform.position, Slope.transform.position + new Vector3(0, -0.5f, 0),out hit, LayerMask.GetMask("Slope")) == true)
76
-
77
- {
78
-
79
- Debug.Log("ヒット!");
80
-
81
-
82
-
83
- if (Vector3.Angle(transform.up, hit.normal) <= 90 && Vector3.Angle(transform.up, hit.normal) >= 0)
84
-
85
- {
86
-
87
- // velocity = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, stepHit.normal) * transform.forward * walkSpeed).y, 0f) + transform.forward * walkSpeed;
88
-
89
- v = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, hit.normal) * transform.forward * ani.speed).y, 0f) + transform.forward * ani.speed;
90
-
91
- Debug.Log("登れる坂です。 : " + v.y);
92
-
93
-
94
-
95
- }
96
-
97
- }
98
-
99
- }
100
-
101
-
102
-
103
115
  }
104
116
 
105
117
 

1

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

2020/02/11 12:15

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 坂道を上り下りするプログラム下が時の処理の実装法が思つかない
1
+ 坂道を上り下りする処理地面にくっついて平地と同じ速度で移動する処理を作りたい。
test CHANGED
@@ -11,6 +11,12 @@
11
11
 
12
12
 
13
13
  提示コードなのですがこれはプレイヤーの足元に子の空のオブジェクトを設定して坂道を上る時にRayを発射してそこに当たったらY軸の増加量を計算するという処理なのですが"上る処理"は完成しましたが **"下る処理"の実装方法がわかりません**
14
+
15
+
16
+
17
+ ※ use gravityを使うと坂道を下るときに空中に浮いてから下に下がるという処理を行ってしまうため上手く実現できません。
18
+
19
+ またAddForceなどを使うとそもそも動かなくなってしまいますbool型変数などを使って空中に居る時だけ、など判定処理をするとuse gravityと同じぐらいに処理が違ってしまうのでうまく実現できず困っています。
14
20
 
15
21
 
16
22