質問編集履歴

2

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

2020/02/14 07:36

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -20,6 +20,18 @@
20
20
 
21
21
  結論として上手く実装する方法がわかりません。どうしたらいいのでしょうか? つまり地面にくっついて移動して落ちる時は落下したいという処理なのですがどの方法を使っても上手く実装できません。
22
22
 
23
+ **坂を下る時**の処理で空中に浮いたり、浮きはしないがガタガタしたり、なんやかんだで目的の処理が実現できないので重力どうこうまず、やり方自体を変えないといけないと思いましてこの参考サイトを見たのですが下る時はこのようなやり方で実装するのでしょうか? 提示コードにはありませんがこのような処理を入れたのですが上手く坂道を下ってくれず**空中に浮く**というバグが発生していまいます。
24
+
25
+
26
+
27
+
28
+
29
+ 参考サイト:https://gametukurikata.com/program/rigidbodyandcollider
30
+
31
+
32
+
33
+
34
+
23
35
 
24
36
 
25
37
 

1

文章とタイトルを大幅修正

2020/02/14 07:36

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 坂道平地と同じ速度上るためにyの増加量を算出するプログラムが正しか知りたい
1
+ 重力処理がどんなやり方しても上手く実装きな
test CHANGED
@@ -1,12 +1,36 @@
1
- 提示コード////コメント部のコードですがy移動量計算すとによって坂道でも等速で上に上がはずなのですがDebug.Log()使っても正い処理行われているわかないので確認のため質問ししたこれ正しく行えているのでしょうか?
1
+ 提示コード////コメント部のコード **台上から落ちる時や坂道るとかか重力**どを設定したいのですが以下の色んなやり方ましたらのバグが発生するの実装できせんいろいろやり方と思うのですがどすればいいのでしょうか?
2
+
3
+
4
+
2
-
5
+ 1、use gravityを使って常にY軸をマイナス方向に力を掛ける。やり方、小さい数字から大きい数字まで試しましたがガタガタ画面が揺れてしまい上手く実装できません。※AddForceを使ってY軸は0にしました。
6
+
7
+
8
+
3
-
9
+ 2、rb.AddForceを使ってY軸に-20設定しましたがこんどは坂道を下がるときに空中に浮いてから下がり始めるため上手く実装できません。
10
+
11
+
12
+
4
-
13
+ 3,velocityを使ってみましたがY軸に-20くらいの設定しましたが同じ動かせなくなり坂道で画面がガタガタしたり挙動がおかしくないります。
14
+
15
+
16
+
17
+
18
+
19
+
20
+
5
-
21
+ 結論として上手く実装する方法がわかりません。どうしたらいいのでしょうか? つまり地面にくっついて移動して落ちる時は落下したいという処理なのですがどの方法を使っても上手く実装できません。
6
-
7
-
8
-
22
+
23
+
24
+
25
+
26
+
9
- ![![イメージ説明](29417136436ef72d10447655db021e07.png)](287731018160b357de3fa990fb84e423.png)
27
+ ![イメージ説明](ab75441d480dc4940f8f00e62279ddc0.png)
28
+
29
+
30
+
31
+
32
+
33
+
10
34
 
11
35
  ```ここに言語を入力
12
36
 
@@ -18,67 +42,133 @@
18
42
 
19
43
 
20
44
 
21
- public class Player : MonoBehaviour
45
+ public class Controller : MonoBehaviour
22
46
 
23
47
  {
24
48
 
49
+
50
+
51
+ private float input_h;
52
+
53
+ private float input_v;
54
+
25
- public GameObject slopRay;
55
+ private Vector3 move;
26
-
56
+
27
- Rigidbody rb;
57
+ private Rigidbody rb;
58
+
28
-
59
+ private float walk_speed;//移動速度
60
+
61
+ private Animator ani;//移動速度
62
+
29
- Animator anim;
63
+ private Vector3 gravity;
64
+
30
-
65
+ private bool isJump = false;//ジャンプしてるかどうかを管理する
66
+
31
- Vector3 move;
67
+ private Vector3 v;
32
-
33
-
34
-
35
-
36
-
68
+
37
- float speed = 5.0f;
69
+ private bool isDush;
38
-
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
39
- float gravity = -20.0f;
79
+ GameObject Ground;
80
+
40
-
81
+ GameObject Slope;
41
-
42
-
43
-
44
-
82
+
83
+
84
+
85
+
86
+
45
- // Start is called before the first frame update
87
+ // Use this for initialization
46
88
 
47
89
  void Start()
48
90
 
49
91
  {
50
92
 
93
+
94
+
95
+ Ground = GameObject.Find("GroundCheck");
96
+
97
+ Slope = GameObject.Find("SlopeCheck");
98
+
99
+ walk_speed = 5.0f;
100
+
101
+ gravity = Vector3.zero;
102
+
51
103
  rb = GetComponent<Rigidbody>();
52
104
 
53
- anim = GetComponent<Animator>();
105
+ ani = GetComponent<Animator>();
54
-
55
- move = new Vector3();
106
+
56
-
107
+
108
+
109
+
110
+
57
- }
111
+ }
58
-
59
-
60
-
61
- /*アニメ管理*/
112
+
62
-
113
+
114
+
63
- void Animation_Mng()
115
+ void Gravity_Mng()//ジャンプ管理
64
-
116
+
65
- {
117
+ {
66
-
67
- anim.SetFloat("forward",Mathf.Abs(Mathf.Sqrt((move.x * move.x) + (move.z * move.z))));
118
+
68
-
119
+
120
+
121
+
122
+
69
- }
123
+ }
70
-
71
-
72
-
73
- /*坂道の補正*/
124
+
74
-
125
+
126
+
127
+
128
+
75
- void slopMove()
129
+ void Move_Mng()
76
-
130
+
77
- {
131
+ {
132
+
133
+
134
+
78
-
135
+ input_h = Input.GetAxis("Horizontal");
136
+
79
-
137
+ input_v = Input.GetAxis("Vertical");
138
+
139
+
140
+
141
+
142
+
143
+
144
+
80
-
145
+ Vector3 move_z = new Vector3();
146
+
81
-
147
+ Vector3 move_x = new Vector3();
148
+
149
+ move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v ;//* walk_speed;
150
+
151
+ move_x = Camera.main.transform.right * input_h; //* walk_speed;
152
+
153
+ move = move_x + move_z;
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+ if (move != Vector3.zero)
166
+
167
+ {
168
+
169
+ transform.rotation = Quaternion.LookRotation(move.normalized);
170
+
171
+ }
82
172
 
83
173
  }
84
174
 
@@ -90,119 +180,55 @@
90
180
 
91
181
  {
92
182
 
93
- float input_H = Input.GetAxis("Horizontal");
94
-
95
- float input_V = Input.GetAxis("Vertical");
96
-
97
- Vector3 move_x = new Vector3();
98
-
99
- Vector3 move_z = new Vector3();
100
-
101
-
102
-
103
- move_z = Vector3.Scale(Camera.main.transform.forward,new Vector3(1,0,1)).normalized * input_V * speed;
104
-
105
- move_x = Camera.main.transform.right * input_H * speed;
106
-
107
- move = move_x + move_z;
108
-
109
-
110
-
111
- RaycastHit hit;
112
-
113
- //float y = 0;
114
-
115
-
116
-
117
- Debug.DrawRay(slopRay.transform.position,slopRay.transform.forward * 0.1f,Color.red);
118
-
119
- if(Physics.Linecast(slopRay.transform.position, slopRay.transform.position + (slopRay.transform.forward * 0.1f),out hit))
120
-
121
- {
122
-
123
- // Debug.Log("Hit !!!");
124
-
125
-
126
-
127
- Vector3 v = new Vector3();
128
-
129
- //velocity = new Vector3(0f, (Quaternion.FromToRotation(Vector3.up, stepHit.normal) * transform.forward * walkSpeed).y, 0f) + transform.forward * walkSpeed;
130
-
131
- //////////////////////////////////////↓のコード
132
-
133
- v = new Vector3(0f,(Quaternion.FromToRotation(transform.up , hit.normal) * transform.forward * speed ).y,0f) + transform.forward * speed;
134
-
135
- Debug.Log(v.y);
136
-
137
- move.y = v.y;
138
-
139
-
140
-
141
- }
142
-
143
- else
144
-
145
- {
146
-
147
-
148
-
149
- move.y = 0;
150
-
151
- }
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
-
160
-
161
- if(move != Vector3.zero)
162
-
163
- {
164
-
165
- transform.rotation = Quaternion.LookRotation(move.normalized);
166
-
167
-
168
-
169
- }
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
-
178
-
179
-
180
-
181
- //Debug.Log(Mathf.Abs(Mathf.Sqrt((move.x * move.x) + (move.z * move.z))));
182
-
183
- // Debug.Log(rb.velocity.y);
184
-
185
-
186
-
187
- //slopMove();
188
-
189
- Animation_Mng();
190
-
191
- }
192
-
193
-
183
+
184
+
185
+ Gravity_Mng();
186
+
187
+
188
+
189
+ Move_Mng();
190
+
191
+
192
+
193
+ move.x *= 200;
194
+
195
+ move.z *= 200;
196
+
197
+
198
+
199
+ }
200
+
201
+
202
+
203
+
204
+
205
+ //////////////////////////////////////////////////////////////////////////////////////////////
206
+
207
+
194
208
 
195
209
  void FixedUpdate()
196
210
 
197
211
  {
198
212
 
213
+
214
+
199
- rb.velocity = move;
215
+ // rb.velocity = new Vector3(move.x, 0, move.z);
200
-
216
+
217
+
218
+
201
- rb.AddForce(0,-100,0);
219
+ rb.AddForce(move.x, -50, move.z);
220
+
221
+
222
+
202
-
223
+ Debug.Log("velocity: " + rb.velocity);
203
-
204
-
224
+
205
- }
225
+ }
226
+
227
+
228
+
229
+ //////////////////////////////////////////////////////////////////////////////////////////////
230
+
231
+
206
232
 
207
233
  }
208
234