【Unity】Physicsを使ってオブジェクトを動かす方法

前回アニメーションに使う為の素材を作成しました。

さっそくアニメーションを作りたいところですが、その前に物理エンジンに関するお話をしたいと思います。

スポンサーリンク

Physicsを使ってオブジェクトを動かす方法

PhysicsとはUnityに付属している物理エンジンのことです。

Physicsを使うことで簡単にオブジェクトを物理挙動させることが出来ます。

オブジェクトの重さや重力などを計算してリアルな挙動をもたらす特徴があります。

Physicsはこんな時に使う

今回は、プレイヤーがステージをジャンプしながら登っていきゴールを目指すゲームを作ります。

Physicsには、物理挙動によって動かすだけではなく当たり判定も行ってくれますので、シューティングゲームやアクションゲームを作成する際によく使います。

プレイヤーを動かす

実際にプレイヤーを配置して動かしてみます。

私は、前回ペイントで作った棒人間の画像を例として使います。

まずは、動かしたいオブジェクトをシーンビューに追加します。

配置した棒人間が重力にしたがって落下するように、「Rigidbodyコンポーネント」をアタッチします。Rigidbodyはオブジェクトに働く重力や摩擦などの計算を行います。

ヒエラルキーウィンドウからオブジェクトを選択して、インスペクター下の「Add Component」→「Physics 2D」→「Rigidbody 2D」と進みます。

Rigibody 2Dをアタッチする

これで、Rigidbody 2Dコンポーネントをアタッチした状態になります。実際にゲームを実行して重力に従って落下するのか確認します。

プレイヤーが重力によって落下している様子

こんな感じですっと画面外へプレイヤーが消えるはずです。

ここまでスクリプトを作ってないですが、Physicsを使うだけでここまでの処理を実現することが出来るわけですね。

次に、プレイヤーが他のオブジェクトと衝突するように「Collider 2Dコンポーネント」をアタッチします。Colliderコンポーネントは当たり判定を担当しています。

先ほどと同じようにヒエラルキーウィンドウでプレイヤーを選択して、「Add Component」→「Physics 2D」→「Circle Collider 2D」を進みます。

これで、プレイヤーの周りに緑の円が表示されると思います。

プレイヤーの緑の円と他のオブジェクトの緑の円が接触することで当たり判定が成されます。専門用語でコライダと呼ばれます。コライダを付加しないと当たり判定も発生しないので注意が必要です。

足場オブジェクトを配置してPhysicsを適用する

衝突する対象物としてプレイヤーが乗っかる足場を配置します。

先ほどと同様にRigidbodyとColliderコンポーネントをアタッチします。

Colliderに関しては、足場が長方形なので「Circle Collider 2D」ではなく「Box Collider 2D」を選択しました。

オブジェクトの形にマッチするようにコライダの種類も変更するようにします。

コライダの名称と形状について
  • 「Circle Collider 2D」・・・円形コライダ
  • 「Box Collider 2D]・・・立方体コライダ
  • 「Edge Collider 2D」・・・線形コライダ

このようにコライダにも種類があるので、オブジェクトの形状に合わせるようにしてください。

ここまで出来たらゲームを実行して動作確認!といきたいわけですが、このまま実行するとプレイヤーと同時に足場も落下してしまいます。

まあRigidbodyをアタッチしているから当然といえば当然なんですけどね!

このままではまずいので、足場が重力の影響を受けないようにします。

足場オブジェクトを選択して、インスペクターのRigidbody 2Dコンポーネント内にあるBody Typeを「Kinematic」に変更します。

ステージが重力の影響を受けないようにする設定

これで、重力の影響を受けずに済むのでゲームを実行して動作を確認します。

ステージが重力の影響を受けない様子

こんな感じで足場が落下しなくなります。

しかし、このままだと棒人間が足場に着地しているように見えませんよね?宙に浮いているように見えて大きな隙間が出来てしまいました。

これではかなり違和感があるので、次回は当たり判定をもっと正確にしていきます。