衝突判定・重力処理を使ってボールを作る

unityパズルゲームの作り方

衝突判定/重力処理の作成

前回、ゲームの素材であるフィールドとボールを作成していきました。今回は、Unityの機能である衝突判定の解説および衝突判定を用いてボールに重力処理を加える方法について説明していきます。

【解説】衝突判定

衝突判定は、現実の物理現象をゲーム上で表現するための機能です。例えば、ボール同士がぶつかる動作や重力によって物体が地面に落ちる動作などに使用されます。

Unity上で作成したゲームオブジェクトには、衝突判定に使用するコンポーネント(コライダー)が割り当てられています。キューブを作成した場合にはCubeColliderが、ボールを作成した場合にはSphereColliderが割り当てられます。

これらのコライダーは、ほかの物体がぶつかったかどうかを判定し、その衝撃に合った動作をします。例えば、コライダーが割り当てられたボール同士がぶつかると、お互いが跳ね返るような方向に移動します。また、コライダーが割り当てられていないボール同士がぶつかった場合には、ボール同士はぶつかったような動作はしないで貫通します

 

コライダーのほかにも、重力の処理を加えることのできるコンポーネント(Rigidbody)があります。これは、通常作成した場合には割り当てられていません。そのため、重力処理を加えたいゲームオブジェクトに対してインスペクタ―からRigidbodyを追加する必要があります。コライダーとRigidbodyを組み合わせることによって、衝突判定の基本的な処理は作成可能です。

ボールに重力処理を加える方法

それでは、ボールに対して重力処理を加える方法について説明していきます。

まず、前回までに作成した画面は下図のようになっています。

この状態で画面上にある再生ボタンを押してみましょう。この状態ではボールにRigidbodyが追加されていないため重力がかかりません。そのため、何も動かないことが分かります。

それでは、Rigidbodyを追加してみましょう。Ballのインスペクタ―からRigidbodyを追加してください。

追加出来たら他の設定は特にしないでもう一度再生ボタンを押してみましょう。

すると、今度はボールが重力に従って落下するようになったことが分かります。ここで注目すべき点は、フィールドの位置で落下が終わっている点です。これは、フィールドのコライダーとボールのコライダーが衝突判定により「衝突した」と判定しているためであることが分かります。

しかし、このままではボールがフィールドにぶつかったときに弾まずに停止してしまいます。スーパーボールのような弾む動作をさせたいためには、Physics Materialを追加する必要があります。Physics Materialは、衝突時のゲームオブジェクトの動作を調整できるマテリアルです。新しい用語が増えて頭がこんがらがるかもしれませんが、簡単に言うと、次のようなことを設定できるマテリアルです。

  • Dynamic Friction:移動中の物体の摩擦(動摩擦係数)
  • Static Friction:停止中の物体の摩擦(静止摩擦係数)
  • Bounciness:衝突時の弾みやすさ(弾性係数)

Dynamic FrictionやStatic Frictionは力学の知識が多少必要になるのでここでは省略します。今回メインに使用するのはBouncinessのみです。

Bouncinessの説明をするため、早速Physics Materialを作成してみましょう。ProjectからPhysicsMaterialsフォルダを作成し、Ballという名前のPhysics Materialを作成してください。

インスペクタ―を確認してみましょう。すると、先ほど説明したDynamic Friction、Static Friction、Bouncinessがあることが分かります。初期設定ではDynamic FrictionとStatic Frictionが0.6、Bouncinessが0となっています。

Bouncinessは0~1の範囲で設定でき数値が大きいほど跳ね返る大きさが大きいことを意味します。現在は0なので全く跳ね返らないことが分かります。

ここで、Bouncinessを0.5に設定してみましょう。

変更後に、プレハブのBallのインスペクタ―からSphereColliderがあることを確認してください。Sphere Colliderの中にMaterialという空欄があると思います。

そこにPhysics Materialを追加できます。
Physics Material(Ball)をドラッグ&ドロップし、インスペクターに設定しましょう。これで、ボールにPhysics Materialが割り当てられます。

それでは、この状態で再生ボタンを押してみましょう。すると、ボールがフィールドとぶつかったとき、少しだけ弾む処理が確認できます。これで、ボールに重力処理を加える部分は完成です。

【Tips】弾性係数の調整

先ほど説明したBouncinessは弾性係数とも呼びます。弾性係数を違う値にすることにより弾む大きさが変化します。例えば、Bouncinessを違う値に設定した3つのボールを並べてみたとしましょう。この状態で再生ボタンを押すと、下のようになります。

おさらいと次回予告

今回は、ボールに重力処理を加える方法について説明していきました。

次回からはC#を使ったコーディングを行っていきます。

コメント

タイトルとURLをコピーしました