回答編集履歴
1
コメントを受けて追記
test
CHANGED
@@ -23,3 +23,87 @@
|
|
23
23
|
なお、重力を掛けたいだけならRigidbodyコンポーネントの`useGravity`をオンにすれば勝手に計算してくれます。自力実装する理由が特に無いならこっちを使った方がいいと思います。
|
24
24
|
|
25
25
|
(もし既にuseGravityがオンならスクリプトから重力関係の処理を外さないと二重で重力を掛けていることになります)
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
> 質問ですがスクリプトで重力をかけるのとuse gravityを使うのとどう違うのでしょうか?自分は重力が毎フレーム増えてほしいのであえで自力で実装しているのですが?
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
「わざわざ条件分岐したりコード書く手間減らせるからuseGravity使えば?」程度の提案なので、コードの方が分かりやすいということならこれでもいいです。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
以下、現実の物理も交えての話です。
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
そもそも**重力は毎フレーム増えません**(地球上にいる限りほぼ一定です)。
|
46
|
+
|
47
|
+
空中にある物体の場合、増加するのは重力ではなく「重力による速度」です。
|
48
|
+
|
49
|
+
重力をUnity的に言えば「FixedUpdate毎に一定の下向きの力をAddForceする」ことになります。
|
50
|
+
|
51
|
+
useGravityであれば、コードを書かなくてもこのAddForceと同じことをやってくれます。
|
52
|
+
|
53
|
+
(本当に重力が毎フレームが増えることを期待しているならこのコードは違うことをしています。もし重力による速度が増えることを期待しているならuseGravityを使うのと等しいので「あえて」の意味を成していません)
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
さらに、**重力はどんな時にも掛かります**。
|
58
|
+
|
59
|
+
地面の上などで静止している物体にも、ジャンプ中の物体にもです。
|
60
|
+
|
61
|
+
地面の上で静止している物体は、地面から重力に等しい力を受けているので、上に飛ぶことも下に埋まることもありません。
|
62
|
+
|
63
|
+
ジャンプする物体は重力よりも大きな上向きの力を与えていることになります。
|
64
|
+
|
65
|
+
動いている物体同士が衝突した場合、それぞれの重さと速度に応じた力が発生します。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
今のコードでは
|
70
|
+
|
71
|
+
「衝突した瞬間、速度がゼロになる(例えば落下している物体がちょっとした物に当たっただけで
|
72
|
+
|
73
|
+
`1m/s→2m/s→(衝突)3m/s→4m/s→5m/s→……`となるはずが、
|
74
|
+
|
75
|
+
`1m/s→2m/s→(衝突)0m/s→1m/s→2m/s→……`となる(数字は適当))」
|
76
|
+
|
77
|
+
「ジャンプしてから次のフレームまでは重力が無い(代わりに上向きの力が働いている)」
|
78
|
+
|
79
|
+
となっているので、現実の物理から見るとおかしい話です。
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
まぁただ「そういう仕様のゲームだ」と言わればその通りです。現実の物理を無視した方が面白い場合もあります。
|
84
|
+
|
85
|
+
現実の物理を理解していて、意図的に変更しているならば問題ありません。
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
なお、本題からは逸れますが(コメントを受けて気付いたのですが)、
|
92
|
+
|
93
|
+
このコードだとフレームレートとタイミングによってはジャンプしなかったりジャンプしすぎたりするかと思います。
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
- フレームレートが高い場合
|
98
|
+
|
99
|
+
ジャンプ後、FixedUpdateが来る前に次のUpdateが来る=上向きのAddForceが一度も実行しない内に下向きのAddForceが実行される=**ジャンプしない(恐らくそれ以降ジャンプ不可になる)**
|
100
|
+
|
101
|
+
- フレームレートが低い場合
|
102
|
+
|
103
|
+
ジャンプ後、次のUpdateが来る前にFixedUpdateが複数回来る=何度も上向きにAddForceされる=**想定より高くジャンプする**
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
以下が参考になるので確認してみてください。
|
108
|
+
|
109
|
+
[[Unity] InputとFixedUpdateと物理演算の関係を整理しよう - Qiita](https://qiita.com/yuji_yasuhara/items/6f50ecdd5d59e83aac99)
|