Unity 2D でテトリスを制作した際に、当たり判定・落下・左右移動・回転の仕様について考えました。これから、その内容について記載していきます。
関連記事
今回の内容の前提になりますので、事前に見ておいて頂けると嬉しいです。
目次
- 当たり判定
- 落下
- 左右移動
- 回転
- 動作のきっかけ
- 落下できない場合の処理
1. 当たり判定
ブロックが以下の動作をする際に、当たり判定が必要になります。
- 落下
- 左右移動
- 回転
判定の内容は「落下中のブロックが、他のブロックや壁に当たるか?」といったものです。
2. 落下
ブロックを落下させる場合、以下の処理を行います。
- 現在の位置のブロック消す
- 軸を
(x, y-1)
に移動してブロックを構成 - 当たり判定(他のブロックや壁に当たるか?)
他のブロックや壁に当たらなければ、軸の移動を確定させて、新しい位置にブロックを表示します。
他のブロックや壁に当たっていたら、軸を元の位置に戻します。
3. 左右移動
ブロックを左右に移動させる場合も、落下の処理とほぼ同じです。
上の画像は、右 (x+1, y)
に動かす場合の例です。右に動かすと壁に当たるので、元の場所に戻します。
4. 回転
回転時の例は以下の通りです。
回転後に衝突する場合は、元の回転パターンに戻します。
5. 動作のきっかけ
落下は「時間経過(フレーム数)」、左右移動と回転は「プレイヤーの入力」で発生させるようにしてます。
下ボタンが押された場合は、落下までの時間(フレーム数)を減らしています。
6. 落下できない場合の処理
ブロックが落下できない(落ちきった)場合は、以下の処理が必要になります。
- 削除判定
- 新規ブロック投下
- ゲームオーバー判定
ブロックが1行以上並んでいる場合は削除します。
新規ブロックを投下して、他のブロックと重なってたらゲームオーバーにします。