はじめに
前回、スクリプトをかいてオブジェクトに当たり判定をつけるところまでできました。
今回はUnity独自の機能のひとつであるPhysicsを使ったゲーム作成に取り組んでみます。
前回の記事
Physicsとは
Unityに標準で付属している物理エンジンです。
使うことで簡単にオブジェクトを物理法則にしたがって動かせます。
Physics 2Dの種類
大きく5種類に分けられるかと思います。
- Rigidbody…オブジェクトを物理エンジンで制御する。
- Collider…オブジェクトの衝突エリアを作れる。エリアの形の種類によっていろいろある。
- Joint…オブジェクトをつなげる。
- Constant Force…時間とともに加速させたい場合に使える。
- Effector…Colliderに対してエフェクトを追加する。
重力を実装する
Rigidbodyを使うことで実装できます。
クリックするとComponentの種類を選択する画面が表示されるので、「Physics 2D」をクリックします。
ポチポチ操作だけで重力が実装されました。
では、本当に重力が実装されたか確認します。
動画ではないため伝わりにくいのですが、実行すると重力に従って落ちていき、🦀が見えなくなりました。(🦀のPositionのy座標が0からマイナスになっています)
他のオブジェクトと衝突させる
Colliderを使うことで実装できます。
Colliderにはその形によって何種類かあるのですが、一旦ここではCircle Collider 2Dを選択してみます。
適用されると、少し見えづらいですが、オブジェクトに丸い円が表示されます。
これは当たり判定に使われます。
では、着地ができる地面のオブジェクトを追加してみることで、オブジェクトとの衝突を検知できることを確認しましょう。
地面のオブジェクトにBox Collider 2Dを追加します。
追加出来たら加えて、Rigidbodyも同じ要領で追加します。
ですが、このままだとブロックにも重力を加えたことで、ブロックも落下してしまいます。
重力の影響を受けない設定
地面に追加したRigidbody 2DのBody TypeをKinematicに変更します。
地面と🦀の間に余白があるように感じるのは、Circle Collider 2Dの円を調整しておらず、でかいためです…
おわりに
画面ぽちぽちだけどこんなに簡単に物理法則をオブジェクトに追加できて驚きました。
次回はPhysicsを使って、ジャンプや移動を実装してみます。
参考