こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Unityの世界に重力を発生させたい
  • Unityで物理演算を使ったゲームを作りたい
  • Rigidbodyを使ってみたい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    結論から話すと、Unityの世界に重力を発生させるためにはRigidbodyコンポーネントを使います。Rigidbodyは重力をシミュレートするだけではなく、物がぶつかる物に力を加えて動かすといった物理演算を簡単に作れます。

    本記事ではRigidbodyの始め方を初心者向けに解説しました。重力は発生させるだけならプログラミングなしで完結します。Rigidbodyの理解を深めることでゲーム開発のヒントが手に入りますので、ぜひ最後まで読んでみてください。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    Rigidbodyとは?

    物理演算をシミュレーションできるコンポーネントです。質量、抵抗、重力といった物理演算に必要な機能が揃っているのです。

    例えばオブジェクト重力に従って落ちる。

    日常では自然現象ですが、、ゲームの世界には最初から重力は存在しません。重力は開発者の手で作る必要があるのです。Unityは「Rigidbody」を使うことで オブジェクト単位 で重力のON/OFFを設定できます。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_0

    上の例では左のUnityちゃんと地面にRigidbodyをセットしました。すると物理演算はRigidbodyをつけたオブジェクトだけ実行されるのです。

    このようにRigidbodyを使うことであなたのゲームに物理系の要素を追加することが可能なのです。ゲームアイデアの1つとしてRigidbodyは覚えておくと良いでしょう。

    👉 【無料】SD版Unityちゃんのダウンロードから使い方を解説!

    Rigidbodyの始め方

    Rigidbodyの理解を深めるために、まずは基本である「重力を発生させてものを落とす」を プログラミングを使わず にやってみます。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_1

    今回はボール(Ball)を地面(Ground)に落として受け止めるサンプルを作ってみましょう。Ballは球、Groundは立方体を変形させて配置してみてください。

    立方体や球をUnityエディタで配置する方法はこちらの記事でわかりやすく解説しています。あわせて読んでみてください。

    球にRigidbodyをセット

    球に重力を与える工程です。GameObject「球(Ball)」に Rigidbodyコンポーネント を追加しましょう。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_2

    ヒエラルキーからBallを選択します。

    👉 今さら聞けないUnityのヒエラルキー(Hierarchy)とは?

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_3

    Ballのインスペクタを開き、 AddComponent ボタンをクリックしてください。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_4

    Rigidbodyと検索。検索は途中まででヒットします。Rigidbodyをクリックしましょう。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_5

    上図のようにRigidbodyがGameObjectにセットされたらOKです。Rigidbodyの設定は特に変更せずデフォルトのままで大丈夫です。以上で準備は完了しました。

    👉 【Unity基礎】GameObjectの使い方(生成や削除など)全て解説

    Unityを実行して重力を確認

    Rigidbodyはエディットモード中では動作しないため、Unityを再生して重力の発生を確認してみましょう。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_6

    Unityエディタ中央上の再生ボタンをクリック。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_7

    すると赤い球(Ball)が上から落ちてくるようになりました。つまりBallに重力という機能が実装されたということです。とっても簡単です。

    ボールが地面で止まる理由

    ボールが地面に落ちて止まるのは至って自然なことだと感じるかもしれません。しかし実は 「重力」と「物が物に当たる」は別機能 なのです。 「機能が違う」ということは、つまりコンポーネントが違うということです。

    重力はRigidbodyコンポーネントを使いましたが、「物が物に当たる(当たり判定)」を実現しているのはCollider(コライダー)コンポーネントです。地面(Ground)とボール(Ball)のInspectorウィンドウを確認してみましょう。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_8

    上図のとおりにGroundには「BoxCollider」、Ballには「SphereCollider」がセットされています。Unityで3Dオブジェクトを作った際には自動的にColliderがセットされるのです。ちなみにBoxColliderとSphereColliderの違いはは当たり判定の形状です。この他にもさまざまなコライダーが存在します。

    もしどちらかのColliderを削除するとどうなるでしょうか。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_9

    このようにボールは地面をすり抜けてしまいます。つまり 「当たり判定」を実装するためには物同士のColliderが必要 なのです。

    衝突した素材の調整

    少しColliderの話を深掘ります。Colliderはただ当たり判定をするだけではなく、衝突シミュレーションを作り込むことができます。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_10

    メニューAssets > Create > Physic Material からPhysicMaterialを作ります。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_11

    「GroundMaterial」と名付けました。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_12

    GroundのBoxColliderの「Material」にセットしてください。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_13

    GroundMaterial(PhysicMaterial)のBouninessを0から1に変更してUnityを実行してみましょう。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_14

    するとボールは地面に衝突した少し跳ねるようになります。つまり「PhysicMaterial」を使うことで 衝突の影響を調整することができる のです。

    Rigidbodyの基本的な使い方まとめ

    このようにRigidbodyとColliderを使うことでプログラミングを一切書かなくても重力を発生させ、当たり判定することができます。簡単にここまでをまとめます。

    Rigidbodyの基本的な使い方まとめ(プログラミング未使用)

    ①RigidbodyをセットしたGameObjectに重力を発生させる

    ②Colliderを付けた者同士が衝突する

    ③PhysicMaterialで衝突の影響を変更できる

    こんな感じです。「Rigidbody」と「Collider」はよくセットで使用します。PhysicMaterialはパラメータの変更で大きく印象を変更できるため、いろいろ試してみてください。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_15

    Rigidbodyを使えばプログラミングせずとも↑上のような物理演算表現も簡単に作れます。Unity初心者、Unityプログラミング初心者はRigidbodyとCollider、PhysicMaterialを調整するだけでちょっとしたゲームが作れます。楽しみながらUnityを学ぶ、慣れる事ができるためRigidbodyはとてもおすすめです。

    その他にRigidbodyのInspectorウィンドウから次のような設定もできます。

    Rigidbodyの機能例
    • 質量(重さ)の設定
    • 空気抵抗
    • 回転に対する抵抗
    • 重力のON/OFF

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_16

    RigidbodyのInspectorウィンドウから各種設定することが可能です。とくに質量、空気抵抗、重力のON/OFFは使用頻度も高いため、ぜひ覚えておきたい内容です。

    ここで空気抵抗の挙動について学んでみましょう。

    空気抵抗の作り方

    Rigidbodyを使うと空気抵抗を簡単に反映できます。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_17

    「Drag」 が空気抵抗の項目です。こちらの数字を0から5に変更してみます。するとどうでしょう。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_18

    左がDrag : 0、右がDrag : 5です。Dragは0の状態では空気抵抗なし。0より大きくすることで空気抵抗をシミュレートできます。オブジェクトをただ単に自由落下させるのではなく、空気抵抗を設定することでよりリアルな表現が可能です。ぜひ使ってみてください。

    力を加えてオブジェクトを動かす方法

    オブジェクトを押す(力を加える)と動きますよね。Rigidbodyはこのような物理的な運動を簡単に作れます。このような物理系ゲームは世の中にたくさんリリースされているのです。

    オオバが昔よく遊んでいた Angry Birds もRigidbodyを使えば実装できそうな気がしますね。

    オブジェクトに力を加えるためにはプログラミングが必要です。具体的にはRigidbodyの 「AddForceメソッド」 を使います。

    【Unity】Rigidbodyの始め方!重力を発生させよう【初心者向け】_19

    上の動画のとおり、RigidbodyのAddForceを使うことで簡単に衝突シミュレーションを実装できます。

    次の記事ではRigidbodyの「AddForce」について徹底解説してみました。 AddForceは簡単そうで意外と深いです。 特に第2引数の 4種のForceMode を知っているか知らないかで難易度が変わります。本記事とあわせてぜひ読んでみてください。

    まとめ Unityに重力を実装するときはRigidbodyを使うと簡単

    Unityの中で重力を簡単に扱う事ができるRigidbodyの紹介をしてきました。内容を簡単にまとめます。

    Rigidbodyの始め方まとめ

    ①RigidbodyをつけたGameObjectに重力が適用される

    ②RigidbodyとColliderを使うことで物理シミュレーションできる

    ③Rigidbodyには質力、空気抵抗、重力のON/OFFができる

    ④物理系ゲームはRigidbodyを1つの選択肢に持っておく

    こんな感じです。

    Unity初心者向けの書籍にはRigidbodyを使ったゲーム開発紹介が多いです。理由はやはり「面白いから」だと思います。Rigidbodyを使うとお手軽に物理系のゲームを作れます。ちょっとしたプログラミングで形にできるのは魅力的です。形になるとモチベーションが上がり、そのまま学習効率アップに繋がります。

    Unity初心者の方はぜひRigidbodyでいろいろ遊んでみてください。Unity面白いな!って思うことがUnityを学ぶ上では大事です。

    この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいRigidbodyライフをお過ごしください。

    オススメ記事
    検証環境
    参考サイト