ゲームオブジェクトとコンポーネントの話を以前しました。今回はゲームオブジェクトに物理演算のコンポーネントを追加して、ゲームオブジェクトに動きを加えて行こうと思います。
↑の動画でも解説していますので、是非ご活用ください。
この記事は本のように順を追って解説しています。この記事は途中のページになります。
この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。
<物理演算の機能を追加しよう>
今回はゲームオブジェクトを物理演算で動くようにしていきます。
といってもそんなに難しい事はしません。あれやこれや説明するよりやってみた方が早いので、とりあえずやってみましょう。
試しに物理演算を適用するオブジェクトを置こう
ヒエラルキーで右クリック>3D Object >CubeでCubeを新規作成しましょう。
さて、とりあえず練習用のオブジェクトが置けました。
Rigidbodyコンポーネントの追加方法
次はCubeを選択した状態でインスペクターウィンドウを見てください
下の方にAddComponentというボタンがあると思うのですが、それを押してください。
すると↓のような状態になると思うのですが、検索ウィンドウに「rigidbody」と入れてみてください
Rigidbodyというのが出てきたと思うのですが、これをクリックします。
インスペクターの下の方にRigidbodyというのが追加されたと思います。これでCubeにリジッドボディというコンポーネントが追加されました。
このコンポーネントがついたオブジェクトは物理演算挙動で動くようになります。
このように、AddComponentでゲームオブジェクトに機能を追加していくことができます。
物理演算による重力を見てみよう
CubeにRigidbodyを追加する事ができたら今度はシーンを再生してみましょう。
この再生ボタンを押してください。
Cubeが落下しました。
これはCubeにリジッドボディをつけたことによって重力の物理演算が働いたため落下しています。簡単ですね。
当たり判定について
ところでCubeを作成した時に始めからBox Colliderというコンポーネントがついていたかと思います。
このBox Colliderというのが当たり判定を表します。
当たり判定の事をコライダーと言います。○○ Colliderという名前のやつは○○という種類の当たり判定になります。Box Colliderというのは箱状のコライダーということになります。
とりあえず、当たり判定というものがどういうものか見てみましょう。
またヒエラルキー>右クリック>3D Object>CubeでCubeを作ってください。
新しく作ったCubeをRigidbodyをくっつけたCubeの下に移動させてください。
↑の状態できたら、再生ボタンを押してみてください。上がリジッドボディ有り、下がリジッドボディ無しです。
このように、当たり判定があるので上に乗る形になります。
解像度の関係で潰れて見えますが気にしないでください
それでは、下のCubeのBox Colliderのチェックを外してみてください。
コンポーネントでチェックボックスが存在するやつはここのチェックを外すことによって無効にする事ができます。この状態で再生してみましょう。
下のゲームオブジェクトの当たり判定が無効になっているので、Cubeをすり抜けてしまいます。
<当たり判定を拡大縮小してみよう>
今度は、もう一回Rigidbodyナシの方のBoxColliderを有効にして、BoxColliderのSizeという項目のX,Y,Zを1.5倍にしてみてください。
すると、Cubeの周りに緑色の線が見えたかと思います。これが当たり判定になります。
この状態で再生してみましょう。
なんか隙間が生まれたと思います。当たり判定が大きくなっているからですね。
Box ColliderのSizeをいじる事で当たり判定の大きさを変える事ができます。
また、Centerの座標を変える事で当たり判定の中心を変えることもできます。
<物理演算で計算される重心について>
今度は物理演算はどのように適用されているのかをみていこうと思います。
親子関係での物理演算
とりあえず、大きくしたコライダーのサイズを元に戻してください。
戻せたら次はヒエラルキー>右クリック>3D Object>SphereでSphereを作ってください。
それをRigidbodyがついている方のCubeの子オブジェクトにして、ちょっとズラした位置においてください。
↓のような感じです。
これで再生すると↓のようになるかと思います。
Sphereを子を追加した事によって重心が右にズレている事がわかりますね。
(CubeとSphereは空間的に繋がっているように見えませんが子オブジェクトにする事によって関連性を持ちます)
今度は、Sphereのコライダーを切ってみましょう。
SphereにはSphere Colliderという球状の当たり判定がついています。これのチェックを外してみてください。これで再生すると
↑のようになるかなと思います。Shpereが物理演算の重心の計算に考慮されなくなりました。
このようにコライダーを切ると物理演算とは無関係の物になります。
Rigidbodyを追加したゲームオブジェクトは「全ての子オブジェクトのコライダー」を考慮した物理挙動を行います。
この時重心は全コライダーの真ん中になります。(プログラムを使うことにより変更することもできます)
親子関係で別々の物理演算を行うには
さて、ここでちょっと困る事があります。
ゲームオブジェクトを親子関係にしたいけど、物理演算での動きは別々に動いてほしい時です。
全親子関係のコライダーを考慮されてしまうと重心が中心になってしまって別々で動かす事ができません。かと言って、親子関係にできないとまとめて処理する事ができなくなってしまい不便です。
では親子関係の状態で物理演算をそれぞれ別々に行ってほしい場合はどうするかと言うと子オブジェクトにもRigidbodyを追加すればOKです。
↑の例で言うとShpereにRigidbodyを追加すればいいわけです。
はい、これで別々に計算されるようになりました。
Shpereに更に子オブジェクトをつけるとShpere以下はShpereのRigidbodyで計算されるようになります。それも別々で計算したければ更にその子オブジェクトにもRigidbodyを追加すればOKです。
<物理的な材質を変えてみよう>
今度はもうちょっと物理演算っぽいことをしてみましょう。
新しくCubeとSphereを作成して、SphereにRigidbodyをつけてみましょう。
Cubeは↑の左から四番目のアイコンのやつで拡大縮小を駆使して床っぽくしてみてください。
とりあえず、↑こんな感じで、Sphereにのみリジッドボディが付いている状態です。
そして、再生してみると
ボテッと落ちます。
このままではなんか想像していた感じにはならないので球をバウンドさせてみましょう。
プロジェクトウィンドウ上で右クリックし、Create>Physic Materialをクリックしてください
名前は適当でOKです。
プロジェクトウィンドウで作成したPhysic Materialを選択している状態でインスペクターを見てみて下さい。
前回、マテリアルというのを解説しました。マテリアルが何か分からない方は↓の記事を参考にして下さい。
マテリアルというのはその物体の材質という意味でしたが、前回のマテリアルは物体の見た目についてだけでした。
このPhysic Materialというものは物体の物理的な材質を設定できる機能です。
例の如く説明するよりやってみた方が早いので、試しに、Bouncinessという項目を1にしてみて下さい。
そして、プロジェクトウィンドウからドラッグ&ドロップでSphereのコライダーのMaterialのところに入れて下さい。
この状態で再生すると
このようにバウンドすると思います。
物体はこのPhysic Materialを使って物理的な性質を変えることができます。
Physic Materialを詳しく説明するとまだちょっと難しい部分が出てきてしまうので、今回のところはこれくらいにしておこうと思います。
もし、詳しい説明が知りたい方がいましたら今回登場したRigidbodyとPhysicMaterialの詳細について↓の記事でまとめてみましたので、もし興味がある方は見てみてください。現段階では難しいと思うので無理してみる必要はないです。
と、いうわけでUnityの簡単な物理演算でした。
次回はいよいよプログラミングをやってみたいと思います。苦手意識がある方、難しいと思っている方でも初心者が扱うような部分は割と簡単ですのであまり抵抗を持たずに見ていただけると幸いです。