1. HOME
  2. ブログ
  3. IT技術
  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 をマスターしてみるのはいかがでしょうか?

記事を書いた人

\ あの有名ゲームにも参画中!? /
(株)ライトコードは、WEB・アプリ・ゲーム開発に強い「好きを仕事にするエンジニア集団」です。
システム開発依頼・お見積もりはこちらまでお願いします。
また、WEB・スマホ系エンジニアを積極採用中です!
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

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


ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事

初心者が3ヶ月でどれくらいプログラミングができるようになるのか

採用情報

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

バックエンドエンジニア

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

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

\ 世界はお前の手の中に・・・ /

モバイルエンジニア

\ サービスの守り神! /

インフラエンジニア

初心者が3ヶ月でどれくらいプログラミングができるようになるのか

初心者が3ヶ月でどれくらいプログラミングができるようになるのか