【Unity】RigidbodyのUseGravity(重力の使用)を変えて実験

【Unity】RigidbodyのUseGravity(重力の使用)を変えて実験

Unity世界には現実世界のように重力が働いています。Rigidbodyコンポーネントを持つオブジェクトはデフォルトで重力の影響を受けますが、重力を無視する設定も可能です。

それがRigidbodyの中にあるUseGravityの設定です。

今回はUseGravityの有無で、どのように運動が変化するか実験してみます。と言っても、割と直感で分かりやすい動きなのでありがたいところ。

 

環境

macOS 10.13 High Sierra

Unity2018.1.0f2

4月末にUnity2018が出てたので早速使ってみました。

Rigidbodyについて

Rigidbodyのアタッチ方法や各設定項目の説明は、以下の記事で解説しています。

ざっくり言うと、Unityで物理演算を使うために必要なコンポーネントです。

今回はその中でもUseGravity(重力の使用)がテーマ。

Rigidbodyのパラメータ
Rigidbodyのパラメータ

 

UseGravity(重力の使用)について

UseGravityは項目名が分かりやすくて好き。

その名の通り、このRigidbodyが重力の影響を受けるかどうかを設定します。

デフォルトではこの項目がtrueに設定されており、Unity世界に働く重力の影響を受けるようになっています。

重力はPhysicsManager(物理演算マネージャー)で定義されており、デフォルトではY軸方向に-9.81の重力がかかっています。現実の重力加速度と同じ感じですね。

PhysicsManagerはメニューバーの[Project Settings] -> [Physics]から開くことができます。

PhysicsManagerウィンドウ
PhysicsManagerウィンドウ

 

落下時の重力

重力といえば自由落下、自由落下といえば重力です。

用意したボールは以下の2種類。

  • useGravity : true
  • useGravity : false

初期位置を空中にして、特に力を加えることなく観察を行います。

重力に魂を引かれる
重力に魂を引かれる

 

まあ、そうなるな。

useGravityをtrueにすれば重力に引かれて落下しますし、falseにすれば力が加わらないので運動状態に変化は発生しません。うん、予想通り。

日常生活でも重力があることに慣れていますから、むしろ落ちてこないことにびっくりするかも。

斜方投射と重力

もう結果はほとんど分かっているようなものだけれど、一応ね。

斜方投射でも重力の影響を見てみましょ。

UseGravityと斜方投射
UseGravityと斜方投射

 

ですよねー。

下に向かう力が無くなっているので、useGravityがfalseならそのまま宇宙へと旅立ちます。

スーパーマリオランドに出てくるスーパーボールみたいな動きですね。あのゲームもなかなか独特な物理法則を持っていた思い出があります。

 

転がしてみる

重力がないので、転がしてみるというのも変な表現ですが、水平方向のみに力を加えてみると以下のように。

UseGravityとゴロゴロ
UseGravityとゴロゴロ

 

おや? useGravityがfalseだと速いですね。

TransformコンポーネントのRotationを確認すると、useGravityがfalseの方は回転していませんでした。つまり、地面に接触しているように見えてちょっと浮いてる感じ。ドラえもんみたいね。

地面に接触していると、若干摩擦力が働いてるんですかね? 地面とボールの物理特性マテリアルを外した状態でも同じ結果になったので、ちょっと別途調査してみる必要があるかも。

衛星を作る

useGravityを外すと、Unity世界の重力によらない表現ができます。例えば宇宙空間で、惑星の周りを公転する衛星なんかが作れそう。

下の画像では、中心にある星を中心として、3つの衛星を作ってみました。

衛星はそれぞれ親オブジェクトを中心の星と同じ位置に配置し、親オブジェクトにRigidbodyとConstantForceコンポーネントをアタッチしました。

親オブジェクト自体をトルクで回転させることで、公転を表現しています。スクリプトを書かなくていいのが楽ちんですね。公転のスピードはトルクの大きさとangularDragの大きさで調整しています。

シーンに最初から存在している『Directional Light』オブジェクトをX軸方向に回転させると夜明けっぽい雰囲気になるので、より宇宙感が出た気がします。

UseGravityを外した惑星たち
UseGravityを外した惑星たち

 

useGravityをtrueにした途端に、彼らは画面下へと落下していきます。きっとY軸下向きの方向にはとてつもなく大きな星があることでしょう。

まとめ

RigidbodyのuseGravityをtrueにした場合とfalseにした場合で、運動がどのように変化するのか実験してみました。

Scene内で宇宙を表現する場合など、Unity世界に働く重力を使わなくていいケースもあるため、切り替えができるのはありがたいです。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!