なにもコンポーネント(機能)をつけない場合、上の図のように、球体は落ちてきません。なぜなら、重力機能(物理シュミレーション)をつけていないからです。
今回はRigidbodyコンポーネントという、重力機能(物理シュミレーション)をオブジェクトに追加、設定する方法をお伝えします。
簡単にこれができるようになります。
この記事でのレイアウトは【2 by 3】となっています。Gifや画像が見にくいという方は、レイアウトを変更してください。
Rigidbodyとは
簡単にいうと、現実世界と同じような物(オブジェクト)の動きをするように制御することができます。
ゲームオブジェクトを物理特性によって制御することができるともいえます。
ティッシュをそのへんに投げてみてください。床に落ちますよね。そのような動きをUnityでも実装することが可能となります。
Rigidbodyの追加方法
- オブジェクトの作成
- Rigidbodyを追加したいオブジェクトを選択
- Add ComponentをおしてRigidbodyを選択
オブジェクトの作成
自分は【Hierarchy→Create→3Dオブジェクト→Sphere】で作成した球体にRigidbodyをつけたいと思います。
あなたもRigidbodyをつけたいオブジェクトを作成してください。
Rigidbodyを追加したいオブジェクトを選択
●オブジェクト選択方法
【HierarchyかSceneビュー】→【選択したいオブジェクトを左クリック】
Rigidbodyを追加したいオブジェクトを選択してください。Hierarchy上でもSceneビュー上でもいいので、左クリックで選択してください。
Add ComponentをおしてRigidbodyを選択
【Inspector】→【Add Component】→【Rigidbodyを選択】
これで【Rigidbody】コンポーネントを追加することができます。また【Rigidbody 2D】というのは、2Dゲームで使える【Rigidbody】です。
もうすでに重力はついてる
【Rigidbody】を追加した時点で、もうすでにオブジェクトに重力がついているはずです。ゲーム再生ボタン【▶】をクリックして、ゲームを実行してみましょう。
どうでしょうか。落下してきましたか?
もし落ちてこないなら【Use Gravity】にチェックを入れる
【Rigidbody】の【Use Gravity】にチェックを入れることで、重力機能がONとなります。もし、オブジェクトが落下しないのならやってみてください。
Rigidbodyの設定
【Rigidbody】コンポーネントをご覧ください。「Mass」「Drag」「Angular Drag」「Use Gravity」「Is Kinematic」「Interpolate」「Collision Detection」と多数の設定項目があります。
「なにがなにを意味するかわからないし、え、なにその英単語、シスタンにものってないよ」ものばかりです。
ざっと説明するとこんな感じです。
Mass | 物体の質量(Kg) |
Drag | 空気抵抗 |
Angular Drag | 回転に対する抵抗 |
Use Gravity | 重力をつけるかつけないか |
Is Kinematic | 物理演算を有効にするかしないか |
Interpolate | 物理効果をなめらかにする |
Collision Detection | 高速で動くオブジェクトのすり抜け防止 |
Constraints | 位置、回転の固定 |
Mass
数字を大きくするほど、質量が大きくなります。白い玉だけ質量を大きくしています。
Drag
空気抵抗を変化させることができます。0の場合は空気抵抗なしの状況を表しています。数値を大きくするほど、空気抵抗は大きくなります。
Angular Drag
回転による空気抵抗を示しています。上は回転による空気抵抗が「0」なので、なにもオブジェクトに触れていないときの回転が変わりません。
数値を大きくするほど、回転による空気抵抗は大きくなります。
Use Gravity
チェックすることで重力機能をつけてくれます。
Is Kinematic
白い玉だけに【Is Kinematic】をつけています。白い玉強し。
チェックすることで物理演算を無効にしてくれます。重力を受けたり、他の物体がぶつかってきても、影響を受けないということですね。でも、ぶつかってきた相手には影響を与えます。
では絶対に動かせないのか?というとそういうわけでもなく、「transform.translate」「transform.rotate」で動かせるんですよ。
複雑なのでまとめまうす。
●まとめ
- チェックつけたオブジェクトは物理演算が無効になる
- 他の物体がぶつかってきたら、そいつは影響を受ける
- 動かすことも可能
Interpolate
物理効果をなめらかにしてくれます。なんかカクカクしてるなって思ったら、使ってみてください。
Collision Detection
(アニメーションは準備中です。そのシチュエーションに遭遇した場合、追加します)
【Collision Detection】を設定することで、オブジェクトのすり抜けを防止してくれます。
Constraints
こやつは「Position」「Rotation」の軸をを固定することができます。例えば自分がロケットを発射したいとします。
その際に「Z軸方向には動いてほしくない」場合、【Freeze Position】の「Z」にチェックをつければ、Z軸の方向に動かなくなります。
「x軸とy軸方向に回転してほしくない」場合、【Freeze Rotation】の「X」「Y」にチェクをつければ、X軸Y軸方向に回転しなくなります。
「Freeze」という言葉の通り、チェックをつけた軸を凍らせてしまいます。氷属性をもつのが「Constraints」です。
跳ね返りPhysics Material
実をいうと、衝突するオブジェクトの摩擦や跳ね返り効果を制御できるようになる【Physics Material】というものもあります。
それでさらに現実の世界のように制御することができます。また、それは長くなるので、改めて記事にします。
ツイッターで更新告知するので、フォローお願いします。(べ、別に告知じゃないからね)
まとめ
- 【Rigidbody】で物理機能をつけることができるよ
- 設定は↓
Mass | 物体の質量(Kg) |
Drag | 空気抵抗 |
Angular Drag | 回転に対する抵抗 |
Use Gravity | 重力をつけるかつけないか |
Is Kinematic | 物理演算を有効にするかしないか |
Interpolate | 物理効果をなめらかにする |
Collision Detection | 高速で動くオブジェクトのすり抜け防止 |
Constraints | 位置、回転の固定 |
あたまの片隅にでも入れといてください。
【Is Kinematic】
→物理演算を無効にできる✔チェックつけたオブジェクトは物理演算が無効になる
✔他の物体がぶつかってきたら、そいつは影響を受ける
✔スクリプトで動かすことも可能
下の図は白い球体だけの物理演算を無効にしている。#unity #unity3d pic.twitter.com/VQkQzT8Xf8
— さぎのみや (@saginomiya8) July 27, 2018
【Drag】
→空気抵抗を制御数値を大きくすると、空気抵抗が大きくなる。#unity #unity3d pic.twitter.com/4SbQ5KpL3s
— さぎのみや (@saginomiya8) July 27, 2018
あと【Unity2D&3Dサンプルゲーム】動画よりわかりやすく記事でゲームを作ろうも作っているのでご覧ください。
さぎのみや(@saginomiya8)でした。
コメント