今回はrigidbodyについて見ていきましょう。
rigidbodyとはズバリ物理演算を扱うための道具です。
物理演算とは難しそうな単語ですよね…
しかしご安心を。
Unityではrigidbodyを使えば、非常に簡単に物理演算を行うことができます!
つまりrigidbodyさえ扱えれば「ピンボールゲーム」や「コイン落としゲーム」のような、物理演算を使うシンプルなゲームならば、すぐに作れるようになるでしょう。
物理演算がこんなに簡単に扱えるなんで、ありがたい話ですね!
今回は前半で、「rigidbodyの基礎」について学び、後半で非常に簡単にrigidbodyを使って物理演算を行ってみましょう!
それではよろしくお願いいたします。
rigidbodyの基礎
まずはrigidbodyのリファレンスを見てみましょう。
Rigidbody
Rigidbody を使うと、ゲームオブジェクトを物理特性によって制御する事ができるようになります。リジッドボディがフォースやトルクを受けると、オブジェクトはより現実的な動きをします。重力をうけたり、スクリプトを使ってフォースを与えたり、 NVIDIA PhysX 物理エンジンを通して他のオブジェクトの影響を受けるようにするためには、ゲームオブジェクトに Rigidbody を追加する必要があります。
参照元: https://docs.unity3d.com/ja/current/Manual/class-Rigidbody.html
この説明を簡単にまとめると以下のことがわかります。
・ゲームオブジェクトを物理特性によって制御する事ができるようになる。
・重力をうけたり、スクリプトを使ってフォースを与えることができる。
・それらを行うためには、ゲームオブジェクトに Rigidbody を追加する必要がある
つまりRigidbodyをオブジェクトに追加すれば、物理演算が簡単に行えるということです。
rigidbodyを使ってみよう!
ではまずは実際にrigidbodyを使ってみましょう。
最初は、以下のような地面を跳ねるボールを作ってみましょうか!
rigidbodyならこんなこともらくらく行えます!
まずはオブジェクトを作る
ではまず地面となるオブジェクトを作成しましょう。
地面を作る
①「Hierarchy上で右クリック」→ 3DObject → Cube を選択し、四角いオブジェクトを作ります。
②Position,Rotationは(0,0,0)とし、Scaleは(5,1,5)としましょう。
③すると四角が、前横に拡大され、地面っぽくなったとおもいます。
ボールを作る
次にボールを作ります。
①「Hierarchy上で右クリック」→ 3DObject → Sphere でボールを作ります。
②Position(0,5,0)にしましょう。
③画像のように、地面の真上にボールが配置されたはずです。
rigidbodyをつけよう
ここでrigidbodyが登場します!
ボールへrigidbodyをつけましょう。
①ボールを選択します。
②AddComponentボタンを押します。
③rigidbodyを検索し、出てきたrigidbodyを選択しましょう!
うまく追加ができたら、以下のような表示がオブジェクトへ追加されているはずです。
実行してみる
それでは実行してみましょう。
どうでしょうか?
ちゃんと物理演算され、落下できていることが確認することができると思います!
プログラムも特に書いてないのに、動いてくれるなんてすごいですね!
ボールが跳ねるようにしよう!
しかしボールが全く跳ねないのは違和感がありますね。
というわけでボールが跳ねるようにしましょう。
PhysicMaterialを作る
プロジェクト上で右クリック→Create→PhysicMaterial をクリックしましょう。
反発係数設定
Bouncinessを0.9に設定しましょう。
ボールへ反映させる
先ほど作った「Physic Material」をクリックし掴んで、ボールの「SphereCollider→Material」へ投げ込みます。
うまくいったらMaterialの中に作った、PhysicMaterialの名前が入ったはずです。
実行する
それでは実行してみましょう!
どうでしょう?ちゃんと跳ねるようになったと思います。
ボールを複数置いてみる
ついでにボールを複数ぶつかるように置いてみましょう。
いい感じですね。
物理演算って感じがしますね!
rigidbodyに関わるパラメーターを見てみよう!
先ほどまでの流れで、なんとなく物理演算を行うために必要な処理が理解できたと思います。
しかし、より使いこなすために各パラメーターの詳細をみてみましょう!
rigidbodyのパラメータ
Mass | 物体の質量(Kg単位)。 |
Drag | 力により動く際に、発生する空気抵抗の大きさ。 |
AngularDrag | 回転する際に、オブジェクトに影響する空気抵抗の大きさ。 |
UseGravity | チェックを入れるとオブジェクトは重力の影響を受けます。 |
IsKinematic | 物理特性エンジンによって駆動されません。Transformによって操作します。 |
Interpolate | 物理演算の精度に関する処理の選択。 |
CollisionDetection | 壁の貫通を予防する処理の選択。 |
Constraints | X,Y,Z軸ごとに、Rigitbodyの影響を受けるか受けないか選択できる。 |
各項目を簡単に説明するとこのようになります。
初心者が主に必要とする項目としては、自由落下のON/OFFが選択できる「UseGravity」や「Constraints」でしょうか?
例えばゲームのステージの床に、Rigidbodyをつけなければならなくなった時。
UseGravityを外しておかないと、ステージもキャラクターと一緒に落下して行ってしまいます。
そういう時に「UseGravity」を外したり「Constraints」により影響する軸を絞ったりすることがあります。
とはいえどれも有用なパラメータですので、より詳細を知りたい場合は公式のリファレンスを読み理解を深めてみましょう。
参照元: https://docs.unity3d.com/jp/530/Manual/class-Rigidbody.html
PhysicMaterialのパラメータ
DynamicFuiction | すでに移動中の場合に使用される摩擦。 |
StaticFriction | 静止したままの場合に使用される摩擦。 |
Bounciness | 跳ね返し度合い。 |
FrictionCombine | 衝突するオブジェクト間の摩擦をどう処理するか。 |
BounceCombine | オブジェクト間の跳ね返し度合いをどう処理するか。 |
「DynamicFuiction」「StaticFriction」は摩擦に関するパラメータです。
「Bounciness」は先ほど使いましたね!
オブジェクトが衝突した時の反発に関する度合いの設定です。
残りの二つは、摩擦や反発に関する処理の選択です。
よりUnityを細かく扱う時につかうかもしれない処理ですが、今は気にしなくてもよいでしょう。
またより深く理解を深めたい場合はリファレンスをよんでみましょう!
参照元: https://docs.unity3d.com/ja/530/Manual/class-PhysicMaterial.html
まとめ
今回はRigitbodyを通して、非常に簡単にですが物理演算に片足を踏み入れました。
いかがでしたでしょうか?
コイン落としぐらいならすぐに作れそうな気がしてきませんか?
ぜひ引き続きRigitbodyを学び、物理演算を扱ってみてください!