質問編集履歴

6

文章を修正

2021/04/09 10:53

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
- 提示コードですが回転コメント部のコードですは回転する方向に傾き続けてしまうのでちょっとやりたことと違すが**ボタンを押した時その角度に傾いて欲しいのです** Rigidbodyを使っているのすが提示サイトを参考に考えてましたがどうしたらいいのかわかりません。 現在のコードはその角度に動き続けてしましやりたいこととは違います。
1
+ 提示コード回転コメント部のコードですがこれその方向に力がかかって回転する処理です。これではその方向に力がなくなるまで動いてしまいます。そうではなく**十字キーの上キーを押したら機体が押した分上に傾く処理を書きたいです**。これを実装するにはどういった関数を使えばいいのでしょうか?rigidobdy 回転とか調べましたがしたやり方がわかりません。
2
+
3
+
4
+
2
-
5
+ 質問内容 [ **十字キーの上キーを押したら機体が押した分上に傾く処理を書きたいです。** ]
3
-
4
6
 
5
7
 
6
8
 

5

文章を修正

2021/04/09 10:53

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードですが回転のコメント部のコードですは回転する方向に傾き続けてしまうのでちょっとやりたいことと違うのですがボタンを押した時その角度に傾いて欲しいのですがこれをするにはどうしたらいいのでしょうか? Rigidbodyを使っているのですが提示サイトを参考に考えてましたがどうしたらいいのかわかりません。 現在のコードはその角度に動き続けてしましやりたいこととは違います。
1
+ 提示コードですが回転のコメント部のコードですは回転する方向に傾き続けてしまうのでちょっとやりたいことと違うのですが**ボタンを押した時その角度に傾いて欲しいのです。** Rigidbodyを使っているのですが提示サイトを参考に考えてましたがどうしたらいいのかわかりません。 現在のコードはその角度に動き続けてしましやりたいこととは違います。
2
2
 
3
3
 
4
4
 

4

提示文章を修正

2021/04/09 07:36

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- [Unity] 飛行機で機体の回転をたい。
1
+ [Unity] 飛行機で機体の回転処理書きたい。
test CHANGED
@@ -1,16 +1,4 @@
1
- 飛行機の回転を実装させたいのですが上手くいきません。現在の現象はキー離しても押した時の方向動き続けてしこれはどうすればキーを押した時だけ回転するとう動作を実装できるのでしょうか?参考サイトより色々実験しましたが上手くません。
1
+ 提示コードですが回転コメント部のコードですは回転する方向に傾き続けてしまうのでちょっとやりたいことと違うのですがボタンを押した時角度傾いしいのでこれをするにはどうしたのでしょうか? Rigidbodyを使っているのですが提示サイトを参考に考えてましたがどうしたらいのかわかりません。 現在のコードはその角度に動き続けてしましやりたいこととは違います。
2
-
3
-
4
-
5
-
6
-
7
- 現在の現象[ ぐらんぐらんと上下に回転してしまい飛行として成立しない。 ]
8
-
9
- 試したこと「Unity スタンダートアセットを参考に挙動を実装」
10
-
11
-
12
-
13
-
14
2
 
15
3
 
16
4
 
@@ -20,8 +8,6 @@
20
8
 
21
9
  ![イメージ説明](24e63e542e4c3af77dd904981df3dc29.png)
22
10
 
23
-
24
-
25
11
  ```cs
26
12
 
27
13
  using System.Collections;
@@ -144,7 +130,7 @@
144
130
 
145
131
  {
146
132
 
147
- angleVec.y = 0;
133
+ // angleVec.y = 0;
148
134
 
149
135
  }
150
136
 
@@ -178,7 +164,7 @@
178
164
 
179
165
  {
180
166
 
181
- angleVec.z = 0;
167
+ // angleVec.z = 0;
182
168
 
183
169
  }
184
170
 
@@ -236,7 +222,7 @@
236
222
 
237
223
 
238
224
 
239
-
225
+ /////////////////////////////////////////////////////////////////////////////////////////////
240
226
 
241
227
  //回転
242
228
 
@@ -246,67 +232,13 @@
246
232
 
247
233
  torque += angleVec.z * transform.forward;
248
234
 
249
- rb.AddTorque(torque * speed);
235
+ //rb.AddTorque(torque * speed);
250
236
 
251
237
  //rb.AddRelativeTorque(torque * speed * Time.deltaTime * 1f);
252
238
 
253
-
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
-
262
-
263
-
264
-
265
- // "Aerodynamic" calculations. This is a very simple approximation of the effect that a plane
266
-
267
- // will naturally try to align itself in the direction that it's facing when moving at speed.
268
-
269
- // Without this, the plane would behave a bit like the asteroids spaceship!
270
-
271
- if (rb.velocity.magnitude > 0)
272
-
273
- {
274
-
275
- // compare the direction we're pointing with the direction we're moving:
276
-
277
- m_AeroFactor = Vector3.Dot(transform.forward,rb.velocity.normalized);
278
-
279
- // multipled by itself results in a desirable rolloff curve of the effect
280
-
281
- m_AeroFactor *= m_AeroFactor;
282
-
283
- // Finally we calculate a new velocity by bending the current velocity direction towards
284
-
285
- // the the direction the plane is facing, by an amount based on this aeroFactor
286
-
287
- var newVelocity = Vector3.Lerp(rb.velocity, transform.forward * speed,
288
-
289
- m_AeroFactor * speed * 1f * Time.deltaTime);
290
-
291
- rb.velocity = newVelocity;
292
-
293
-
294
-
295
- // also rotate the plane towards the direction of movement - this should be a very small effect, but means the plane ends up
296
-
297
- // pointing downwards in a stall
298
-
299
- rb.rotation = Quaternion.Slerp(rb.rotation,
239
+ rb.rotation *= Quaternion.Euler(angleVec.x, 0, angleVec.z);
300
-
240
+
301
- Quaternion.LookRotation(rb.velocity, transform.up),
241
+ /////////////////////////////////////////////////////////////////////////////////////////////
302
-
303
- 1f * Time.deltaTime);
304
-
305
- }
306
-
307
-
308
-
309
-
310
242
 
311
243
 
312
244
 

3

文書を修正

2021/04/09 07:31

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,14 @@
1
- 提示コードですが飛行機が前に移動するだけのコードです。
2
-
3
- やりたいこ「 飛行機をヨーピッチロールさせるのはどうしたらいいのか?Rigidbodyを使って 」
4
-
5
-
6
-
7
-
8
-
9
- 質問内容[ 上キーを押したときに飛行機が上を向く回転動作なのですが斜め時などはどうやって実装すればいのでしょか?提示サイトの関数をいろいろ試しましたが実装できません。  ]
1
+ 飛行機回転を実装させたいのですが上手くいきません。現在の現象はキーを離しても押した時の方向続けてしまいます。これはどうすればキーを押した時だけ回転するとう動作を実装できるのでしょか?参考サイトより色々実験しましたが上手くいきません。
2
+
3
+
4
+
5
+
6
+
7
+ 現在の現象[ ぐらんぐらんと上下に回転してしまい飛行として成立しない。 ]
8
+
9
+ 試したこと「Unity スタンダートアセットを参考に挙動を実装」
10
+
11
+
10
12
 
11
13
 
12
14
 
@@ -34,15 +36,27 @@
34
36
 
35
37
  {
36
38
 
39
+ [SerializeField] float wingsArea; //翼の面積
40
+
41
+ [SerializeField] float airDensity; //空気密度
42
+
43
+ [SerializeField] float speed; //速度
44
+
45
+ [SerializeField] float cl; //揚力係数
46
+
47
+
48
+
49
+
50
+
37
51
  Rigidbody rb;
38
52
 
53
+
54
+
39
- float speed = 0;
55
+ float L; //揚力
40
-
56
+
41
- Vector3 moveVec;
57
+ Vector3 moveVec; //向き
42
-
58
+
43
- Vector3 angleVec; //ヨーピッチロール
59
+ Vector3 angleVec; //回転
44
-
45
- Vector3 pitchVec; //ピッチ
46
60
 
47
61
 
48
62
 
@@ -62,6 +76,10 @@
62
76
 
63
77
 
64
78
 
79
+ L = 0;
80
+
81
+
82
+
65
83
  }
66
84
 
67
85
 
@@ -76,7 +94,7 @@
76
94
 
77
95
  {
78
96
 
79
- speed += 10;
97
+
80
98
 
81
99
  }
82
100
 
@@ -84,11 +102,19 @@
84
102
 
85
103
  {
86
104
 
87
- speed += -10;
88
-
89
-
90
-
91
- }
105
+ }
106
+
107
+ else
108
+
109
+ {
110
+
111
+
112
+
113
+ }
114
+
115
+
116
+
117
+
92
118
 
93
119
 
94
120
 
@@ -96,7 +122,11 @@
96
122
 
97
123
  {
98
124
 
99
- angleVec.x += Mathf.PI / 360;
125
+ angleVec.x = 1f;
126
+
127
+ cl += -1;
128
+
129
+
100
130
 
101
131
  }
102
132
 
@@ -104,7 +134,9 @@
104
134
 
105
135
  {
106
136
 
107
- angleVec.x += Mathf.PI / 360;
137
+ angleVec.x = -1f;
138
+
139
+ cl += 1;
108
140
 
109
141
  }
110
142
 
@@ -112,23 +144,23 @@
112
144
 
113
145
  {
114
146
 
115
- //angleVec.x = 0;
147
+ angleVec.y = 0;
116
-
148
+
117
- }
149
+ }
150
+
151
+
152
+
153
+
154
+
118
-
155
+ //ヨール
119
-
120
-
121
-
122
-
123
-
124
-
125
-
126
156
 
127
157
  if (Input.GetKey(KeyCode.LeftArrow))
128
158
 
129
159
  {
130
160
 
131
- angleVec.y += 50;
161
+ angleVec.z = 1;
162
+
163
+
132
164
 
133
165
  }
134
166
 
@@ -136,7 +168,9 @@
136
168
 
137
169
  {
138
170
 
139
- angleVec.y += -50;
171
+ angleVec.z = -1;
172
+
173
+
140
174
 
141
175
  }
142
176
 
@@ -144,18 +178,40 @@
144
178
 
145
179
  {
146
180
 
147
- angleVec.y = 0;
181
+ angleVec.z = 0;
148
-
182
+
149
- }
183
+ }
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
150
-
193
+ //揚力計算
194
+
151
-
195
+ // moveVec.y = lift(airDensity, wingsArea, speed, cl) / 1000 * Time.deltaTime; //揚力
196
+
197
+
198
+
199
+
200
+
152
-
201
+ // Debug.Log(moveVec.y);
202
+
203
+
204
+
153
-
205
+ // moveVec.z = speed;
154
206
 
155
207
  }
156
208
 
157
209
 
158
210
 
211
+ float m_AeroFactor = 0;
212
+
213
+
214
+
159
215
 
160
216
 
161
217
  void FixedUpdate()
@@ -164,27 +220,91 @@
164
220
 
165
221
 
166
222
 
167
-
223
+ //前進
224
+
168
-
225
+ var forces = Vector3.zero;
226
+
227
+ forces = speed * transform.forward;
228
+
229
+ Vector3 liftDirection = Vector3.Cross(rb.velocity, transform.right).normalized;
230
+
231
+ var liftPower = lift(airDensity, wingsArea, speed, cl) / 1000 * Time.deltaTime;
232
+
233
+ forces += liftPower * liftDirection;
234
+
235
+ rb.AddForce(forces);
236
+
237
+
238
+
239
+
240
+
241
+ //回転
242
+
243
+ var torque = Vector3.zero;
244
+
245
+ torque += angleVec.x * transform.right;
246
+
247
+ torque += angleVec.z * transform.forward;
248
+
169
- rb.angularVelocity = Vector3.up * angleVec.x;
249
+ rb.AddTorque(torque * speed);
250
+
170
-
251
+ //rb.AddRelativeTorque(torque * speed * Time.deltaTime * 1f);
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
171
-
265
+ // "Aerodynamic" calculations. This is a very simple approximation of the effect that a plane
266
+
172
-
267
+ // will naturally try to align itself in the direction that it's facing when moving at speed.
268
+
173
-
269
+ // Without this, the plane would behave a bit like the asteroids spaceship!
174
-
175
-
176
-
270
+
177
- if (rb.velocity.z < 50)
271
+ if (rb.velocity.magnitude > 0)
178
-
272
+
179
- {
273
+ {
274
+
180
-
275
+ // compare the direction we're pointing with the direction we're moving:
276
+
277
+ m_AeroFactor = Vector3.Dot(transform.forward,rb.velocity.normalized);
278
+
279
+ // multipled by itself results in a desirable rolloff curve of the effect
280
+
281
+ m_AeroFactor *= m_AeroFactor;
282
+
283
+ // Finally we calculate a new velocity by bending the current velocity direction towards
284
+
285
+ // the the direction the plane is facing, by an amount based on this aeroFactor
286
+
181
- rb.AddForce(transform.forward * speed);
287
+ var newVelocity = Vector3.Lerp(rb.velocity, transform.forward * speed,
288
+
182
-
289
+ m_AeroFactor * speed * 1f * Time.deltaTime);
290
+
291
+ rb.velocity = newVelocity;
292
+
293
+
294
+
295
+ // also rotate the plane towards the direction of movement - this should be a very small effect, but means the plane ends up
296
+
297
+ // pointing downwards in a stall
298
+
299
+ rb.rotation = Quaternion.Slerp(rb.rotation,
300
+
301
+ Quaternion.LookRotation(rb.velocity, transform.up),
302
+
303
+ 1f * Time.deltaTime);
304
+
183
- }
305
+ }
184
-
185
-
186
-
187
- //Debug.Log(rb.velocity.z);
306
+
307
+
188
308
 
189
309
 
190
310
 
@@ -194,10 +314,40 @@
194
314
 
195
315
 
196
316
 
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+ //揚力を取得
326
+
327
+ float lift(float air,float wing,float spd,float cl)
328
+
329
+ {
330
+
331
+ float l = (air / 2) * wing * spd * spd * cl; //揚力計算
332
+
333
+
334
+
335
+
336
+
337
+ return l;
338
+
339
+ }
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
197
349
  }
198
350
 
199
- }
200
-
201
351
 
202
352
 
203
353
  ```

2

文章を修正しました。

2021/04/09 04:45

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- [Unity] ヨーピッチの回転をRigidbodyで行いたい。
1
+ [Unity] 飛行機で機体の回転をたい。
test CHANGED
@@ -1,4 +1,12 @@
1
+ 提示コードですが飛行機が前に移動するだけのコードです。
2
+
3
+ やりたいこ「 飛行機をヨーピッチロールさせるのはどうしたらいいのか?Rigidbodyを使って 」
4
+
5
+
6
+
7
+
8
+
1
- 提示コドのコメント内部ですがRigidbody使っている場合で飛行機のヨーピッチ回転を行いたいのですがコメント内部のコードではどちらか片方に角度が編集さてしま同時に傾くとう場合実装がきません。参考サイトではRigidbodyで回転のやり方が載っていまどれもやりたいこととは違い両方の傾きを実装するにはどの関数を使うのでしょうか?
9
+ 質問内容[ 上キーを押したときに飛行機が上を向く回転動作なのですが斜めに傾き時などはどうやって実装すいいのでしょか?提示サイトの関数をろいろ試しした実装できせん  ]
2
10
 
3
11
 
4
12
 
@@ -26,23 +34,17 @@
26
34
 
27
35
  {
28
36
 
29
-
30
-
31
- Vector3 moveVec; //移動方向
32
-
33
- Vector3 pitchAxis; //ピッチ
34
-
35
- Vector3 rollAxis; //ロール
36
-
37
- Vector3 rotateAxis; //ロール
38
-
39
- [SerializeField]float moveSpeed = 0; //移動速度
40
-
41
-
42
-
43
- Rigidbody rb;
37
+ Rigidbody rb;
38
+
44
-
39
+ float speed = 0;
40
+
45
-
41
+ Vector3 moveVec;
42
+
43
+ Vector3 angleVec; //ヨーピッチロール
44
+
45
+ Vector3 pitchVec; //ピッチ
46
+
47
+
46
48
 
47
49
 
48
50
 
@@ -54,19 +56,9 @@
54
56
 
55
57
  rb = GetComponent<Rigidbody>();
56
58
 
57
-
58
-
59
-
60
-
61
59
  moveVec = new Vector3(0,0,0);
62
60
 
63
- //pitchAxis = transform.localEulerAngles; //回転を取得
64
-
65
- pitchAxis = new Vector3(0,0,0); //ピッチ回転を取得
66
-
67
- rollAxis = new Vector3(0,0,0); //ロール回転を取得
61
+ angleVec = new Vector3(0,0,0);
68
-
69
-
70
62
 
71
63
 
72
64
 
@@ -74,17 +66,17 @@
74
66
 
75
67
 
76
68
 
69
+ // Update is called once per frame
70
+
77
- void KeyInput()
71
+ void Update()
78
72
 
79
73
  {
80
74
 
81
- //速度
82
-
83
- if (Input.GetKey(KeyCode.W))
75
+ if(Input.GetKey(KeyCode.W))
84
-
76
+
85
- {
77
+ {
86
-
78
+
87
- moveVec.z = 1.0f;
79
+ speed += 10;
88
80
 
89
81
  }
90
82
 
@@ -92,41 +84,59 @@
92
84
 
93
85
  {
94
86
 
95
- moveVec.z = -1.0f;
87
+ speed += -10;
88
+
89
+
90
+
91
+ }
92
+
93
+
94
+
95
+ if(Input.GetKey(KeyCode.UpArrow))
96
+
97
+ {
98
+
99
+ angleVec.x += Mathf.PI / 360;
100
+
101
+ }
102
+
103
+ else if (Input.GetKey(KeyCode.DownArrow))
104
+
105
+ {
106
+
107
+ angleVec.x += Mathf.PI / 360;
96
108
 
97
109
  }
98
110
 
99
111
  else
100
112
 
101
- {
113
+ {
114
+
102
-
115
+ //angleVec.x = 0;
103
-
104
-
116
+
105
- }
117
+ }
106
-
107
-
108
-
109
- //ピッチ
118
+
110
-
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
111
- if(Input.GetKey(KeyCode.UpArrow))
127
+ if (Input.GetKey(KeyCode.LeftArrow))
112
-
128
+
113
- {
129
+ {
114
-
130
+
115
- moveVec.y += 1.0f; //移動方向
131
+ angleVec.y += 50;
116
-
117
- rotateAxis.x += -1.0f; //ピッチ
132
+
118
-
119
- }
133
+ }
120
-
134
+
121
- else if (Input.GetKey(KeyCode.DownArrow))
135
+ else if (Input.GetKey(KeyCode.RightArrow))
122
-
136
+
123
- {
137
+ {
124
-
138
+
125
- moveVec.y += -1.0f; //移動方向
139
+ angleVec.y += -50;
126
-
127
- rotateAxis.x += 1.0f; //ピッチ
128
-
129
-
130
140
 
131
141
  }
132
142
 
@@ -134,102 +144,60 @@
134
144
 
135
145
  {
136
146
 
137
-
147
+ angleVec.y = 0;
138
-
148
+
139
- }
149
+ }
140
-
141
-
142
-
143
- //ロール
150
+
144
-
145
- if (Input.GetKey(KeyCode.LeftArrow))
151
+
146
-
147
- {
152
+
148
-
149
- moveVec.x += 1.0f; //移動方向
153
+
150
-
151
- rotateAxis.z += -1.0f; //ロール
152
-
153
- }
154
-
155
- else if (Input.GetKey(KeyCode.RightArrow))
156
-
157
- {
158
-
159
- moveVec.x += -1.0f; //移動方向
160
-
161
- rotateAxis.z += 1.0f; //ロール
162
-
163
-
164
-
165
- }
166
-
167
- else
168
-
169
- {
170
-
171
-
172
-
173
- }
174
154
 
175
155
  }
176
156
 
177
157
 
178
158
 
179
- // Update is called once per frame
159
+
180
-
160
+
181
- void Update()
161
+ void FixedUpdate()
182
162
 
183
163
  {
184
164
 
165
+
166
+
167
+
168
+
185
- KeyInput(); //キー入力
169
+ rb.angularVelocity = Vector3.up * angleVec.x;
186
-
170
+
171
+
172
+
173
+
174
+
175
+
176
+
187
- Move(); //移動
177
+ if (rb.velocity.z < 50)
178
+
188
-
179
+ {
180
+
181
+ rb.AddForce(transform.forward * speed);
182
+
189
- }
183
+ }
190
-
191
-
192
-
193
- //移動
184
+
194
-
195
- void Move()
185
+
196
-
197
- {
186
+
198
-
199
-
200
-
201
- //rb.AddForce(moveVec * moveSpeed); //移動
187
+ //Debug.Log(rb.velocity.z);
202
-
203
- rb.velocity = (moveVec * moveSpeed); //移動
188
+
204
-
205
- /////////////////////////////////////////////////////////////////////////////////////////////
189
+
206
-
207
- // rb.rotation = Quaternion.AngleAxis(pitchAxis.x, Vector3.right);
190
+
208
-
209
- rb.rotation = Quaternion.AngleAxis(rotateAxis, Vector3.forward);
191
+
210
-
211
- ////////////////////////////////////////////////////////////////////////////////////////////
212
192
 
213
193
  }
214
194
 
215
195
 
216
196
 
217
- void FixedUpdate()
218
-
219
- {
220
-
221
-
222
-
223
- }
224
-
225
-
226
-
227
-
228
-
229
-
230
-
231
197
  }
232
198
 
199
+ }
200
+
233
201
 
234
202
 
235
203
  ```

1

文章を修正しました。

2021/04/08 05:42

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,4 @@
1
- 提示コードのコメント内部ですがRigidbodyを使っている場合で飛行機のヨーピッチ回転を行いたいのですがコメント内部のコードではどちらか片方に角度が編集されてしまい同時に傾くという場合の実装ができません。参考サイトではRigidbodyでの回転のやり方が載っていますがどれを使えばかわかりせん場合はどうすすればいいのでしょうか? ただ回転させたいであまり複雑なこと必要としていません。
1
+ 提示コードのコメント内部ですがRigidbodyを使っている場合で飛行機のヨーピッチ回転を行いたいのですがコメント内部のコードではどちらか片方に角度が編集されてしまい同時に傾くという場合の実装ができません。参考サイトではRigidbodyでの回転のやり方が載っていますがどれもやりたこととは違い 両方傾きを実装するにはどの関数を使うのでしょうか?
2
-
3
-
4
2
 
5
3
 
6
4