テトリスブロックが一列揃ったら消える処理の作り方

Unity VRゲームの作り方

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

今回はテトリスブロックが一列揃ったら消える処理を作っていきます。

前回の記事↓

テトリスユニットの回転処理とフィールド外に射出したときのバグ修正
今回の講座ではテトリスブロックを枠の外に連射したときのバグの解決から始めていきましょう。 そして、テトリスの肝となる”ブロックユニットの回転処理”の開発を行います。 ここまでくるとかなりVRシューティングテトリスが形になってきま...

一列揃ったら消える処理の作り方

BlockのTagの追加

まずは、Hierarchyに存在するブロックを取得しやすくするため、プレハブのBlockに「block」タグを追加しましょう。

プレハブのBlockを選択して、InspectorのTagからAdd Tagを選択してください。

Tagsから「block」を追加してください。

最後にもう一度プレハブのBlockを選択して、Tagを「block」に変更してください。これでTagの登録は完了です。

コードの追加

ではコードに移ります。

まずは、Field.csのUpdate()を次のように変更してください。Fallが完了した後にShotではなくDeleteに遷移するようにしています。

ここで、CheckLines()という新しい関数を記述しています。これは、揃っている列があるかどうかをチェックしてその列のブロックを削除する関数になります。実際の

CheckLines()は次のようになります。
こちらでは、y座標降順にblocksを走査して、そろっている列がないかチェックしています。そして、そろっている列があれば、列を削除する関数DeleteBlocks()と消えた分だけブロックをずらす関数DropBlocks()を実行させるようにしています。

DeleteBlocks()は、次のようなコードになります。
ここでは、先ほど設定したBlockのタグ「block」を利用して、GameObject.FindGameObjectsWithTag(“block”)によりHierarchy上のBlockをすべて取得させるようにしています。それらをすべてチェックし、指定した座標のブロックであれば削除するようにしています。

さらに、DropBlocks()は次のようになります。

こちらでもTagを利用してBlockのゲームオブジェクトをすべて取得しています。その配列を一度リストに変換しています。変換する理由は、y座標降順にソートさせるためです。ソートはOrderBY()で実行されます。ここでは、ラムダ式を用いて「(x) => x.GetComponent<Block>().y 」によりソートさせています。

 

これで設定は完了です。実行してみましょう。
次のように一列揃ったらブロックが消えるようになったでしょうか?

次回予告

実際にプレイしてみるとわかると思いますが、このままではかなり操作性が悪いと思います。そのため、次回はブロックが衝突する位置を可視化するコードを作成していきます。

次回の記事↓

ブロックの射出先を示すポインター作り/射出後に他ブロックに引っかかるバグを修正
ここまででかなりVRシューティングテトリスの仕組みができてきました。 しかし、 ブロックがどこに飛んでいくのかわかりにくい ブロックがたまにフィールドに引っ掛かってしまう といったプレイする上で致命的な欠点が残っ...

Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】
【必見】無料資料請求でスクエアエニックスのゲーム開発の企画動画が見れる学校アリ
令和時代のゲームクリエイターになるための必須スキルがUnity。未経験からでもUnityを学んでオリジナルゲーム制作&ゲーム会社就職が可能なゲーム専門学校・プログラミングスクールの情報をオンライン&対面形式に分けてまとめました。 無料資料請求でスクエアエニックスのゲーム開発企画の動画もらえるので見てみるといいですよ。
Unity VRゲームの作り方
unity入門の森 ゲームの作り方

コメント

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