テトリスゲームの状態管理・ブロック落下・連射の制限処理を作る | Unity入門の森 ゲームの作り方

テトリスゲームの状態管理・ブロック落下・連射の制限処理を作る

Unity VRゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

今回はゲームの状態進行度を表すクラスや射出されフィールドにはまったブロックが落下する処理を書いていきます。

単一ブロックではなくユニットとして処理を行わないといけない&通常テトリスではなくシューティングテトリスにしたことにより処理がやや複雑化していきます💦

がんばって作っていきましょう!

前回の記事↓

テトリスのブロックユニットの作成と配置方法について
今回はいよいよテトリスらしいブロックを作成していきます。 これまでは、ただの四角いキューブでしたが、テトリスブロックは長いものや、四角いもの、凸の形状のものなどがあります。 それぞれのブロックをユニット単位として生成し、シューティングテトリ...

【Line登録者限定のプレゼントもあるよ!】

ゲームの状態管理

まずは、実装しやすくするため、変数を利用して状態を分けていきます。

今回は、「ブロックを発射する状態」「ブロックが落下する状態」「ブロックが消える状態」の3種類の状態を作成していきましょう。ゲーム全体で使用される変数は静的クラスとして定義するとコーディングしやすくなります。

そのため、新しくGameResource.csファイルを作成してください。コードは以下のように記述してください。

そして、BlockBazooka.csのUpdate()に以下を追加しておきましょう。今後、「Wait」や「Fall」や「Delete」も追加していきます。

Field.csのUpdate()にも以下のコードを追加しておいてください。

【微修正】ブロックを連射できないようにする

まず、現在の状態だと、ブロックを連射できてしまうので、Fire()を以下のように変更してください。

このように書き換えると、Fire()を一回行うと状態が「Wait」になるため連射しなくなります。そして、Field.csのUpdate()を以下のように書き換えましょう。

このようにすることで、フィールドにブロックユニットがくっついたタイミングでstatusを”Fall”に変更させることができます。(現在の状態だと、フィールド外にブロックを発射すると新しいブロックを発射できなくなります。)

ブロックを落下させる処理

次に、ブロックを落下させる処理を実装していきます。まず、落下させるブロックを保持するリストとして、Field.csに以下を定義してください。

つぎに、落下させるブロックを登録する処理を追加します。ApplyBlockUnits()を以下のように修正してください。

つぎに、落下処理の関数としてFallBlocks()を以下のように記述してください。

この関数では、以下の順の処理を行っています。

  1. ブロックリストを高さ方向にソート
  2. 全てのブロックの一個下の位置にブロックが存在するかチェック
    1. 存在しなければブロックを再配置
    2. 存在すれば落下処理を終了させる(返り値をFalseで返す)

ちなみに、冒頭で行っているソートは、isFallを正しく機能させるために必要な処理です。例えば、ソートしない場合のブロックの登録順が下図のような場合、1番のブロックを落下させようとすると4番が配置されているため落下できなくなります。今回のソートは、ブロックリストを高さ方向(y軸方向)の高さが低い順にソートさせるものです。そのため、ブロックの干渉が起こらずうまく動作するようになります。

そして、Update()のFall状態の箇所に以下を追加しましょう。

FallBlocks()の返り値は「ブロックを落下させることができたか」を示しています。この処理では、「落下させることができなかった」場合にstatusをShotに変更するようにしています。これにより、落下処理が完了したタイミングでプレイヤーが新しいブロックを発射できるようになります。

以下をすべて完了させると、次のような結果になります。

 

次回

次回は一列そろったら消去する処理を実装していきます。

次回の記事↓

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


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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