Unity 2D でテトリスを制作したときのメモです。
リンク先の参考文献を元に、基本的な動作について考えた内容です。
当たり判定
テトリスの場合、
「落下中のブロックが、他のブロックや壁に当たるか?」
という判定が必要になります。
処理の流れは、
- 現在のブロックを消す
- 移動後や回転後のブロックを構成
- 他のブロックや壁に当たるか判定
といった感じで、落下・左右移動・回転などの際に必要です。
落下
上は画面右下の一部で、O字ブロックが落下できるか判定してます。
- 現在のブロックを消す
- 軸のブロックを
(x, y-1)
に移動 - 軸以外の位置を取得して判定
といった感じです。
他のブロックや壁に当たらなければ、ブロックを落下地点に固定させます。
左右移動
移動の判定もほぼ同じで、上は右 (x+1, y)
に動かす場合です。
壁やブロックに当たって動かせない場合、最後にブロックを元の場所に戻します。
回転
次の回転パターンを元に判定します。こちらも衝突したら元のパターンに戻します。
動作のきっかけ
落下は「時間経過(フレーム数)」、左右移動と回転は「プレイヤーの入力」で発生させるようにしてます。
落下できない場合
ブロックが落下できない(落ちきった)場合は、
- 削除判定
- 新規ブロック投下
- ゲームオーバー判定
が必要になります。
ブロックが1行以上並んでいる場合は削除します。
新規ブロックを投下して、他のブロックと重なってたらゲームオーバーにします。