テトリスブロックの落下処理と揃ったら消える処理の作り方

Unity C# 落ち物ゲームの作り方


Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】

前回の記事で個々のテトリスブロックの形を変えて生成できるようになりました。

前回の記事:

3Dテトリス用ブロックを作る ScriptableObjectでブロックデータを管理しよう
前回の記事では3Dテトリス用のフィールドと1マス分のブロックの生成までを実現し、好きな形でブロックフィールドを生成する基礎システムを作りました。 前回の記事: 今回の記事では本格的なテトリスブロックを作成していきます。 落ちてくる...

今回の記事では実際にブロックをグリッド内に落下させるようにしていきます。

さらに、落下したブロックが一面に揃ったら消えるようにします。


【Unity入門の森の最新ゲーム開発講座もお届け】

ブロックを落とす処理の作成

実際にブロックを落下させ、グリッドに配置する処理はシーンを管理する「TetrisSceneManager」コンポーネントで行います。

「TetrisSceneManager」コンポーネントはブロックの落下処理の他にゲーム全体の流れの管理なども行います。

それでは新しく「TetrisSceneManager.cs」というスクリプトを作成してください。保存先はお好みでOKですが、記事ではAssetsフォルダーに保存しています。

「TetrisSceneManager.cs」の内容は次のようにしてください。

「TetrisSceneManager」コンポーネントが作成できたら、シーンにある「Tetris」GameObjectにアタッチしてください。

ブロックがグリッドに配置できるようにする

今のままではエラーが出ていますが、ブロックをグリッド内で落下できるようにしました。

次はブロックをグリッド内に配置できるようにしましょう!

この講座では次の条件を満たしたら、ブロックをグリッドに配置するようにします。

  • ブロックが落下した時に、他のブロックと重なる場合
  • グリッドの一番下まで到達した時

それではスクリプトの方を修正していきましょう!

ブロックが落ちた時に他のブロックと重なる処理を行う部分は上の「TetrisSceneManager」コンポーネントの「MainLoop」コルーチンにすでに書いているので、その中でまだ実装されていない部分を作成していきます。

「Block」コンポーネントを次のように修正してください。

この段階でエラーが消えているはずです。

各ゲームオブジェクトの設定内容は次のものにしてください。

上のコードでは矢印キーでブロックを左右前後に移動できるようにしています。

ただし、カメラの向きによっては操作が反対になったりするので、その辺りはカメラの位置によってキー入力処理を修正してください。

ここまでできたら、再生して実際の動作を確認してください。

 

ちなみに上の画像では一番下の部分がわかるように次にGameObjectを追加しています。

 

また、ブロックをグリッドに積み重ねることができるようになっていればOKです。

同じ高さのマスがブロックで埋まったら消すようにする

次にブロックを配置した際に同じ高さのマスが全てブロックで埋まったらその高さのマスのブロックを消すようにします。

その際、その高さより上にあるブロックを一つ下のマスに移動させるようにします。

「Grid」コンポーネントを次のように修正してください。

次に「TetrisSceneManager」コンポーネントを次のように修正してください。

ここまでできましたら、再生してみて動作を確認してください。

同じ高さのマスが全てブロックで埋まった時にその高さのマスのブロックを削除し、それより上にあるブロックが一つ下のマスに移動するようになっていればOKです。

まとめ

今回の記事ではブロックがグリッドの中を落ちるようしました。

ブロックが落ちた時にブロックを積み重ねていくようにしていますが、その際に色分けすると見やすくなるので余力がある方は改造してみるのもいいでしょう。

落下地点に予め印を付けるなどの処理を入れると遊びやすくなりそうですね。

また、一面揃えて消えるだと難易度が高すぎるところがあるので、一列で消えるように仕様設定したほうがよかったかもしれません。

作ってみるとこんな感じで改善点がたくさん出てきます。が、講座としてはやりません。すみません(^^;

腕試しとして改造にチャレンジしてみてください。

まとめると以下のようになります。

  • ブロックを落下させ、グリッド内に配置するようにした
  • 落下したブロックが一面揃っているかの判定を行う
  • 一面に落下がそろっていればブロックをまとめて一面分消す

それでは次の記事に行ってみましょう!

次の記事:

テトリスブロックの回転処理の作り方 3D空間のUnity回転に挑戦!
前回の記事ではブロックの落下処理及び落下後に一面ブロックがそろっていたら消える処理を作りました。 前回の記事: 今回の記事では落下中のブロックを回転するようにしていきます。 スクリプトの内容は難しいものになっていますが、やっていき...

【Unity入門の森の最新ゲーム開発講座もお届け】

コメント

タイトルとURLをコピーしました