【Unity】RigidbodyのUseGravity(重力の使用)を変えて実験
- 2018.05.15
- Rigidbody
- Rigidbody, Unity, UseGravity
Unity世界には現実世界のように重力が働いています。Rigidbodyコンポーネントを持つオブジェクトはデフォルトで重力の影響を受けますが、重力を無視する設定も可能です。
それがRigidbodyの中にあるUseGravityの設定です。
今回はUseGravityの有無で、どのように運動が変化するか実験してみます。と言っても、割と直感で分かりやすい動きなのでありがたいところ。
環境
macOS 10.13 High Sierra
Unity2018.1.0f2
4月末にUnity2018が出てたので早速使ってみました。
Rigidbodyについて
Rigidbodyのアタッチ方法や各設定項目の説明は、以下の記事で解説しています。
ざっくり言うと、Unityで物理演算を使うために必要なコンポーネントです。
今回はその中でもUseGravity(重力の使用)がテーマ。
UseGravity(重力の使用)について
UseGravityは項目名が分かりやすくて好き。
その名の通り、このRigidbodyが重力の影響を受けるかどうかを設定します。
デフォルトではこの項目がtrueに設定されており、Unity世界に働く重力の影響を受けるようになっています。
重力はPhysicsManager(物理演算マネージャー)で定義されており、デフォルトではY軸方向に-9.81の重力がかかっています。現実の重力加速度と同じ感じですね。
PhysicsManagerはメニューバーの[Project Settings] -> [Physics]から開くことができます。
落下時の重力
重力といえば自由落下、自由落下といえば重力です。
用意したボールは以下の2種類。
- useGravity : true
- useGravity : false
初期位置を空中にして、特に力を加えることなく観察を行います。
まあ、そうなるな。
useGravityをtrueにすれば重力に引かれて落下しますし、falseにすれば力が加わらないので運動状態に変化は発生しません。うん、予想通り。
日常生活でも重力があることに慣れていますから、むしろ落ちてこないことにびっくりするかも。
斜方投射と重力
もう結果はほとんど分かっているようなものだけれど、一応ね。
斜方投射でも重力の影響を見てみましょ。
ですよねー。
下に向かう力が無くなっているので、useGravityがfalseならそのまま宇宙へと旅立ちます。
スーパーマリオランドに出てくるスーパーボールみたいな動きですね。あのゲームもなかなか独特な物理法則を持っていた思い出があります。
転がしてみる
重力がないので、転がしてみるというのも変な表現ですが、水平方向のみに力を加えてみると以下のように。
おや? useGravityがfalseだと速いですね。
TransformコンポーネントのRotationを確認すると、useGravityがfalseの方は回転していませんでした。つまり、地面に接触しているように見えてちょっと浮いてる感じ。ドラえもんみたいね。
地面に接触していると、若干摩擦力が働いてるんですかね? 地面とボールの物理特性マテリアルを外した状態でも同じ結果になったので、ちょっと別途調査してみる必要があるかも。
衛星を作る
useGravityを外すと、Unity世界の重力によらない表現ができます。例えば宇宙空間で、惑星の周りを公転する衛星なんかが作れそう。
下の画像では、中心にある星を中心として、3つの衛星を作ってみました。
衛星はそれぞれ親オブジェクトを中心の星と同じ位置に配置し、親オブジェクトにRigidbodyとConstantForceコンポーネントをアタッチしました。
親オブジェクト自体をトルクで回転させることで、公転を表現しています。スクリプトを書かなくていいのが楽ちんですね。公転のスピードはトルクの大きさとangularDragの大きさで調整しています。
シーンに最初から存在している『Directional Light』オブジェクトをX軸方向に回転させると夜明けっぽい雰囲気になるので、より宇宙感が出た気がします。
useGravityをtrueにした途端に、彼らは画面下へと落下していきます。きっとY軸下向きの方向にはとてつもなく大きな星があることでしょう。
まとめ
RigidbodyのuseGravityをtrueにした場合とfalseにした場合で、運動がどのように変化するのか実験してみました。
Scene内で宇宙を表現する場合など、Unity世界に働く重力を使わなくていいケースもあるため、切り替えができるのはありがたいです。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】RigidbodyのAngularDrag(回転の抵抗)を変えて実験 2018.05.14
-
次の記事
【Unity】RigidbodyのIsKinematic(物理演算の影響の有無)を変えて実験 2018.05.15
コメントを書く