Unity で テトリス風ゲームを作ってみる#7
前回の続き
前回テトリミノの移動・回転操作の実現方法について確認できたので、今回はブロック削除について考える。
ラインの削除とブロックの落下
テトリミノが着地後、すべてがブロックで満たされたラインはそのライン上のブロックを消し、それより上にあるブロックを一段下げる、という処理を行う必要がある。
よって実現したいことは、
-
- 1 ラインすべてがブロックで満たされているかどうかの判定とブロックの検出
- 検出したブロックの削除
- 削除したラインの上にあるブロックの検出と下段への移動
である。
まず、1 ラインすべてがブロックで満たされているかどうかは、Raycast を使って特定の高さにあるブロックをすべて検出し、その数がフィールドの幅と同数であるかどうかを確認することで実現可能。
Raycast で確認する高さは、着地したテトリミノの各ブロックの高さを使えばOK。
Raycast の幅は、フィールドの右端から左端までの幅と同じ。検出したブロックの数が、フィールドの幅(10 個)と同じ数であれば、フィールドの1 ラインがすべてブロックで満たされているということになる。
ブロックの削除は、Raycast 関数が検知したすべてのGameObject をリストとして取得できるので、そのリストを使ってブロック(GameObject)をDestroy 関数使って削除すればよい。
次に、削除したラインより上に存在するブロックを一段下げる方法を考える。こちらもRaycast を使って削除した上のラインの高さから上にあるすべてのブロックをラインごとにフィールドの最上段まで検出して、検出したブロック(GameObject)の位置を下に移動すればOK.
これらをテトリミノが着地したタイミングで実行するようにすれば、着地→ラインの削除→上段ブロックの移動が実現できる。試しにプロトした結果が以下。
次の記事