こんにちは、Unityエンジニアのオオバです。
結論から話すと、Unityの世界に重力を発生させるためにはRigidbodyコンポーネントを使います。Rigidbodyは重力をシミュレートするだけではなく、物がぶつかる物に力を加えて動かすといった物理演算を簡単に作れます。
本記事ではRigidbodyの始め方を初心者向けに解説しました。重力は発生させるだけならプログラミングなしで完結します。Rigidbodyの理解を深めることでゲーム開発のヒントが手に入りますので、ぜひ最後まで読んでみてください。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
Rigidbodyとは?
物理演算をシミュレーションできるコンポーネントです。質量、抵抗、重力といった物理演算に必要な機能が揃っているのです。
例えばオブジェクト重力に従って落ちる。
日常では自然現象ですが、、ゲームの世界には最初から重力は存在しません。重力は開発者の手で作る必要があるのです。Unityは「Rigidbody」を使うことで オブジェクト単位 で重力のON/OFFを設定できます。
上の例では左のUnityちゃんと地面にRigidbodyをセットしました。すると物理演算はRigidbodyをつけたオブジェクトだけ実行されるのです。
このようにRigidbodyを使うことであなたのゲームに物理系の要素を追加することが可能なのです。ゲームアイデアの1つとしてRigidbodyは覚えておくと良いでしょう。
👉 【無料】SD版Unityちゃんのダウンロードから使い方を解説!
Rigidbodyの始め方
Rigidbodyの理解を深めるために、まずは基本である「重力を発生させてものを落とす」を プログラミングを使わず にやってみます。
今回はボール(Ball)を地面(Ground)に落として受け止めるサンプルを作ってみましょう。Ballは球、Groundは立方体を変形させて配置してみてください。
立方体や球をUnityエディタで配置する方法はこちらの記事でわかりやすく解説しています。あわせて読んでみてください。
球にRigidbodyをセット
球に重力を与える工程です。GameObject「球(Ball)」に Rigidbodyコンポーネント を追加しましょう。
ヒエラルキーからBallを選択します。
👉 今さら聞けないUnityのヒエラルキー(Hierarchy)とは?
Ballのインスペクタを開き、 AddComponent ボタンをクリックしてください。
Rigidbodyと検索。検索は途中まででヒットします。Rigidbodyをクリックしましょう。
上図のようにRigidbodyがGameObjectにセットされたらOKです。Rigidbodyの設定は特に変更せずデフォルトのままで大丈夫です。以上で準備は完了しました。
👉 【Unity基礎】GameObjectの使い方(生成や削除など)全て解説
Unityを実行して重力を確認
Rigidbodyはエディットモード中では動作しないため、Unityを再生して重力の発生を確認してみましょう。
Unityエディタ中央上の再生ボタンをクリック。
すると赤い球(Ball)が上から落ちてくるようになりました。つまりBallに重力という機能が実装されたということです。とっても簡単です。
ボールが地面で止まる理由
ボールが地面に落ちて止まるのは至って自然なことだと感じるかもしれません。しかし実は 「重力」と「物が物に当たる」は別機能 なのです。 「機能が違う」ということは、つまりコンポーネントが違うということです。
重力はRigidbodyコンポーネントを使いましたが、「物が物に当たる(当たり判定)」を実現しているのはCollider(コライダー)コンポーネントです。地面(Ground)とボール(Ball)のInspectorウィンドウを確認してみましょう。
上図のとおりにGroundには「BoxCollider」、Ballには「SphereCollider」がセットされています。Unityで3Dオブジェクトを作った際には自動的にColliderがセットされるのです。ちなみにBoxColliderとSphereColliderの違いはは当たり判定の形状です。この他にもさまざまなコライダーが存在します。
もしどちらかのColliderを削除するとどうなるでしょうか。
このようにボールは地面をすり抜けてしまいます。つまり 「当たり判定」を実装するためには物同士のColliderが必要 なのです。
衝突した素材の調整
少しColliderの話を深掘ります。Colliderはただ当たり判定をするだけではなく、衝突シミュレーションを作り込むことができます。
メニューAssets > Create > Physic Material
からPhysicMaterialを作ります。 「GroundMaterial」と名付けました。
GroundのBoxColliderの「Material」にセットしてください。
GroundMaterial(PhysicMaterial)のBouninessを0から1に変更してUnityを実行してみましょう。
するとボールは地面に衝突した少し跳ねるようになります。つまり「PhysicMaterial」を使うことで 衝突の影響を調整することができる のです。
Rigidbodyの基本的な使い方まとめ
このようにRigidbodyとColliderを使うことでプログラミングを一切書かなくても重力を発生させ、当たり判定することができます。簡単にここまでをまとめます。
①RigidbodyをセットしたGameObjectに重力を発生させる
②Colliderを付けた者同士が衝突する
③PhysicMaterialで衝突の影響を変更できる
こんな感じです。「Rigidbody」と「Collider」はよくセットで使用します。PhysicMaterialはパラメータの変更で大きく印象を変更できるため、いろいろ試してみてください。
Rigidbodyを使えばプログラミングせずとも↑上のような物理演算表現も簡単に作れます。Unity初心者、Unityプログラミング初心者はRigidbodyとCollider、PhysicMaterialを調整するだけでちょっとしたゲームが作れます。楽しみながらUnityを学ぶ、慣れる事ができるためRigidbodyはとてもおすすめです。
その他にRigidbodyのInspectorウィンドウから次のような設定もできます。
- 質量(重さ)の設定
- 空気抵抗
- 回転に対する抵抗
- 重力のON/OFF
RigidbodyのInspectorウィンドウから各種設定することが可能です。とくに質量、空気抵抗、重力のON/OFFは使用頻度も高いため、ぜひ覚えておきたい内容です。
ここで空気抵抗の挙動について学んでみましょう。
空気抵抗の作り方
Rigidbodyを使うと空気抵抗を簡単に反映できます。
「Drag」 が空気抵抗の項目です。こちらの数字を0から5に変更してみます。するとどうでしょう。
左がDrag : 0、右がDrag : 5です。Dragは0の状態では空気抵抗なし。0より大きくすることで空気抵抗をシミュレートできます。オブジェクトをただ単に自由落下させるのではなく、空気抵抗を設定することでよりリアルな表現が可能です。ぜひ使ってみてください。
力を加えてオブジェクトを動かす方法
オブジェクトを押す(力を加える)と動きますよね。Rigidbodyはこのような物理的な運動を簡単に作れます。このような物理系ゲームは世の中にたくさんリリースされているのです。
オオバが昔よく遊んでいた Angry Birds もRigidbodyを使えば実装できそうな気がしますね。
オブジェクトに力を加えるためにはプログラミングが必要です。具体的にはRigidbodyの 「AddForceメソッド」 を使います。
上の動画のとおり、RigidbodyのAddForceを使うことで簡単に衝突シミュレーションを実装できます。
次の記事ではRigidbodyの「AddForce」について徹底解説してみました。 AddForceは簡単そうで意外と深いです。 特に第2引数の 4種のForceMode を知っているか知らないかで難易度が変わります。本記事とあわせてぜひ読んでみてください。
まとめ Unityに重力を実装するときはRigidbodyを使うと簡単
Unityの中で重力を簡単に扱う事ができるRigidbodyの紹介をしてきました。内容を簡単にまとめます。
①RigidbodyをつけたGameObjectに重力が適用される
②RigidbodyとColliderを使うことで物理シミュレーションできる
③Rigidbodyには質力、空気抵抗、重力のON/OFFができる
④物理系ゲームはRigidbodyを1つの選択肢に持っておく
こんな感じです。
Unity初心者向けの書籍にはRigidbodyを使ったゲーム開発紹介が多いです。理由はやはり「面白いから」だと思います。Rigidbodyを使うとお手軽に物理系のゲームを作れます。ちょっとしたプログラミングで形にできるのは魅力的です。形になるとモチベーションが上がり、そのまま学習効率アップに繋がります。
Unity初心者の方はぜひRigidbodyでいろいろ遊んでみてください。Unity面白いな!って思うことがUnityを学ぶ上では大事です。
この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。
この記事が気に入ったらフォローしよう
「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!
最後まで読んでいただきありがとうございました!
すばらしいRigidbodyライフをお過ごしください。
- Unity2020.3.31f1