Unityのキャラクタ
Unityでキャラクタを制御する時は、リジッドボディ(Rigidbody)コンポーネントか、キャラクタコントローラ(Character Controller)コンポーネントを利用すると楽である。傾斜のある床や階段のような段差を登らせたい場合はキャラクタコントローラを利用し、それ以外の時はリジッドボディを利用するとよい。
複数のキャラクタの接触を判定したり、接触時の物理挙動をシミュレーションするには、コライダー(Collider)コンポーネントを利用する。
ブロック崩しでは、床を登る必要はないので、リジッドボディとコライダーを利用する。
リジッドボディ(Rigidbody)
リジッドボディを日本語に訳すと「剛体」であり、以下のような物理挙動をシミュレーションしてくれる機能である。
- 一定速度で移動する等速直線運動
- 重力落下などに使える等加速度運動
- ものを押した際の摩擦
- 衝突した時に跳ね返らせる弾性衝突
- などなど
適切に設定をすれば、ほとんどプログラムを組まずに高度な物理処理をUnityが自動的に行ってくれる。単体のものを動かしたり、接触した時の挙動を自前で実装する場合は、リジッドボディのみで実現できる。
コライダー(Collider)
2つ以上のものが接触して、作用・反作用や摩擦力を計算するには、リジッドボディに加えて、コライダーを追加する。コライダーには以下のような機能がある。
- 衝突したか
- どのように衝突したのか
- お互いの形状がどういうものか
- お互いの重量はどれぐらいか
- 摩擦係数や弾性係数がどのぐらいか
コライダーを機能させには、衝突するオブジェクトの最低一方に、リジッドボディかキャラクタコントローラを持っている必要がある。
以上から、ブロック崩しに登場する個々のオブジェクトについて検討する。
プレイヤーバー
- 左右キー、あるいはマウスの左右にあわせて左右に動く
- 枠にぶつかると止まる
- Unityに任せたいので、リッジドボディが必要
- ゲームスタート時はボールがバーにくっついて移動し、スペースキーで発射する
- ゲームスタート時は、ボールを子オブジェクトにして、物理法則が作用しないようにする
以上から、プレイヤーバーにはコライダーとリッジドボディを実装する。
ボール
- 最初はプレイヤーバーにくっついて動く
- プレイヤーバーの子オブジェクトにして、物理法則が作用しないようにする
- 一度射出されると、一定方向に一定の速度で動く(等速運動)
- リッジドボディに任せる
- 壁やブロックにぶつかると、ぶつかり方に応じて跳ね返る
- リッジドボディに任せる
- プレイヤーバーにぶつかると跳ね返る
- リッジドボディに任せる
- 画面下に落下するとミスになる
- ボックスコライダーを画面外において、接触を検出して処理する
以上より、コライダーとリッジドボディを実装し、動きは殆どリッジドボディに任せる。
ブロック
- ボールがぶつかると消える
- ボールとぶつかったかは、ブロックの接触で判定する
- 消えると点数が入る
- ブロックの消滅処理に実装
- 全部消えると面クリア
- ブロックの消滅処理に実装
ブロックは衝突するだけで、物理シミュレーションはしない。接触相手のボールにリジッドボディが設定されているので、ブロックにはコライダーのみでよい。