1. HOME
  2. ブログ
  3. エンジニアになろう!
  4. 【Unity】Rigidbodyの基本
Rigidbodyの基本

【Unity】Rigidbodyの基本

オブジェクトをリアリスティックに動かそう!

ゲーム内のオブジェクトやキャラクターを、現実の世界のように動かしたい!

そんな時に便利なのが「Rigidbody」。

Rigidbody とは、オブジェクトを物理特性によって制御するための機能です。

例えば、「手に持ったリンゴを放したら落ちる」のが当たり前ですよね?

このように、オブジェクトの動作をより自然にしてくれるのです。

今回は、「Rigidbody」の基本について解説していきます!

Rigidbody を追加

まずは、オブジェクトに Rigidbody コンポーネントを付けていきましょう。

地面とボールを作る

最初に、地面を作ります。

Hierarcy 上で右クリックし、「3D Object」から「Plane」を選択します。

Hierarcy 上で右クリックし、「3D Object」から「Plane」を選択

同様にしてボールを作り、地面の上方に配置します。

同様にしてボールを作り、地面の上方に配置

位置は好みで構いませんが、ここでは「Position(0,4,0)」とします。

Rigidbody をつける

次に、Rigidbody コンポーネントをボールオブジェクトに付け加えます。

Sphere を選択した状態で AddComponent をクリックし、「Rigidbody」を検索・選択しましょう。

3D ゲームを作る場合、Rigidbody 2D を選択しないように注意してください。

Sphere を選択した状態で AddComponent をクリックし、「Rigidbody」を検索・選択

これで、ボールに物理的特性が加わりました。

試しに実行してみると、ボールが重力の影響を受け、地面まで落下するはずです。

プロパティーを確認

さて、Rigidbody コンポーネントを見てみると、いくつかのプロパティーが並んでいますね。

ここでは、よく利用する基本的な部分を解説していきます。

Rigidbody コンポーネントを見てみると、いくつかのプロパティーが並んでる
Mass物体の質量(Kg)
Drag空気抵抗
Angular Drag回転抵抗
Use Gravity重力機能の有無
Is Kinematic物理的挙動の有無
Constraints位置と回転の固定

こんな時に使うと便利

Is Kinematic の使いどころ

当たり判定などで Rigidbody コンポーネントは必要だけど、重力や衝突の影響を受けてオブジェクトが動くのは困るといった時に便利です。

また、スクリプトから、動的に物理的挙動の有無を切り替えたい場合にも役立ちます。

Constrains の使いどころ

例えば、Freeze Position の x にチェックを入れた場合、オブジェクトは力によって x 方向に動くことがなくなります。

ただし、Freez Position は「ワールド座標」の軸、Freez Rotation は「ローカル座標」の軸による動きの制限である点に注意してください。

AddForce() の使い方

次は、「Rigibody.AddForce()」を使って、スクリプトからオブジェクトに力を加えてみましょう。

関数のパラメーター

force

第1引数の force には「力のベクトル」が入ります。

どの方向に、どれくらいの力を加えるのか、ワールド座標におけるベクトルで与えます。

mode

第2引数には「力のタイプ」が入ります。

Force(デフォルト)継続的な力質量使用
Impulse瞬間的な力質量使用
Acceleration継続的な加速質量無視
VelocityChange瞬間的な加速質量無視

スクリプトの書き方

それでは、実際にスクリプトを書いていきましょう。

スペースボタンを押すと、ボールに上向きに力を加える仕様にしたいと思います。

コードは以下の通りです。

あとは、作成したスクリプトをボールにアタッチすれば適用されます。

物体の重心を変える

Rigidbody を使えば、オブジェクトの重心を変えることもできます。

偏りのある回転をさせたり、オブジェクトのバランスをとる際に役立ちますよ。

EmptyObject で重心の位置を決める

重心を移動させたいオブジェクトの子オブジェクトに「EmptyObject」を作成します。

EmptyObject は、Transform コンポーネントのみを持ったオブジェクトです。

EmptyObject を作成する

対象のオブジェクト上で右クリックし、「Create Empty」を選択します。

分かりやすいように「CenterOfMass」という名前にしておきましょう。

対象のオブジェクト上で右クリックし、「Create Empty」を選択

Empty Object を移動させる

Empty Object を重心にしたい位置まで移動させれば OK です。

Empty Object を重心にしたい位置まで移動させれば OK

スクリプトで重心を変える

重心の位置を決めたら、次は実際に重心を移動させましょう。

コードは以下の通りです。

スクリプトを対象のオブジェクトにアタッチしたら、CenterOfMass を myCennterOfMass に割り当てます。

スクリプトを対象のオブジェクトにアタッチしたら、CenterOfMass を myCennterOfMass に割り当て

これで、重心の位置が変更されました!

重力の変更

最後に、重力の向きと大きさを変更しましょう。

デフォルトでは、Y 軸方向に「−9.81」の重力がかけられています。

画面上方の Edit から ProjectSetting を選択し、Physics を選択します。

画面上方の Edit から ProjectSetting を選択し、Physics を選択

あとは、Gravity の X, Y ,Z 各方向への重力を変更するだけです。

あとは、Gravity の X, Y ,Z 各方向への重力を変更するだけ

さいごに

Rigidbody を使えば、簡単にリアリスティックな動作を実装できます。

「ピンボール」のようなシンプルなゲームなら、基礎的なテクニックだけですぐに作れちゃいますよ!

この機会に、ぜひ Rigidbody をマスターしてみるのはいかがでしょうか?

こちらの記事もオススメ!


書いた人はこんな人

広告メディア事業部
広告メディア事業部
「好きを仕事にするエンジニア集団」の(株)ライトコードです!

ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もり大歓迎!

また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。

以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア