ゲームの設計を考えよう
今回も前回のぷよぷよ作成の時と同様、まず最初にゲームの部品は何か、どの部品にどういうスクリプトを付けたら良いかを一旦整理していきましょう。
そのためにも、とりあえずテトリスを100回ぐらい遊んでみましょう。スマホのアプリでも、WEB上のゲームでも、ぷよぷよテトリスのゲームでも、Nintendo Switchをお持ちでネット接続出来る方はテトリス99でも…。。世の中にはテトリスゲームって大量にあります!何でも良いので遊んでみて、まずはゲームの基本的な挙動を掴んでいきましょう!
ゲームの部品を考えよう
では、このゲームの基本部品を並べていきます。とりあえず、右図のような4個のブロックを繋げた色々なミノ(「Cube」オブジェクト×4です)、そしてぷよを並べていくフィールドを作るための床とか壁(ただの「Cube」オブジェクトです)が必要ですね。
他にも、細かい話ですが、消した列数、現在のレベルを示すテキストUIなどが必要になりますね。まぁとりあえず、こんなもんでしょうか。
次に、スクリプトをアタッチさせる必要のある「動くオブジェクト」はどれでしょう?まぁゲームやると分かりますが、ミノオブジェクトですよね!なので、ミノオブジェクトに付けるスクリプトを作成する必要があります。
そして、ミノをランダムに生成する工場が必要になりますね。この工場を稼働させるためのミノ生成スクリプトが必要です。
他に、監督スクリプトも必要ですね。例えば、「各列10ブロック分、スキマ無くしき詰めたらその列のブロックは消える」工程については監督スクリプトに記述していきます。また、今回のワガハイ式テトリスでは「何列分ブロックが消えたか」を右上のテキストUIにて表示します。他にも、10列消すとレベルが1増えて落下速度が上昇する指令も出したり、「積み上げたらゲームオーバー画面に移行」なども監督スクリプトに記述します。本当、色々な役割がありますね!
それ以外にも、レベルを決める最初の画面の挙動、ポーズ画面作成、など細かな作業は様々ありますが、とりあえずゲームのメイン部分に必要なのは大体こんな所でしょうか。
各スクリプトの作成については別記事にて書いていきます。ゲームが遊べるページの下部にて目次を掲載しておりますので、そちらから目的の解説ページへジャンプするしていくのがオススメです。
シーンにオブジェクトを配置しよう
では次に、オブジェクトを配置していきます。とりあえず、上で挙げたこのゲームの基本部品を並べてみます。今回は、右図のように配置しました。x軸y軸の交差点(図中真ん中)が原点(x,y)=(0,0)になります。また、右図中での正方形1マスは幅1.0fで、ブロックのサイズも1辺1.0fとなっており、1ブロックがこの1マスに丁度入るサイズになっております。
よって、ブロックオブジェクトの中心は、右図のように(x,y)=(○.5f,○.5f)という位置に配置される訳ですね。
ちなみに、ブロックを配置するフィールドは縦20マス×横10マスになっております。
注:テトリミノの落下挙動は何にスクリプトを付ける?
次回以降、ミノの落下やプレイヤー操作による挙動をスクリプト化していきたいのですが、このスクリプトはどのオブジェクトに紐づけたら良いでしょうか?
ぷよぷよの時と同様、各ブロックの挙動について、少し砕けた表現でまとめますと…
・「4個セットで落下する時」(通称「グループ活動時」):プレイヤーの命令により左右移動したり、左右回転したりする。グループ中の4ブロックの内、どれか1つでも地面や他のブロックの上に着地したら、そこで落下終了になる。
・「4個セットいずれかのブロックが着地した後」(通称「グループ解散後」):着地していないブロックは浮いたまま。その時、10個のブロックで敷き詰められた列は消え、消えた列数分上のブロックは落下する。
このような各ブロックの挙動をどのようにスクリプトに書いていくか?ですが…。今回は下図のような方針でスクリプトを作成していきます!
まず前提として、「グループ活動時」は、4つのブロック(子)は「ブロックセット」という1つの空オブジェクト(親)に属しています。
「グループ活動時」の動きはこの空オブジェクト(親)に付けたスクリプトに記述します。そして、いずれかのブロックが着地するとこの空オブジェクト(親)は消滅します。
そして、「グループ解散後」の動きは今回は監督スクリプトに記述します。「コンビで活動時」は各ブロックは監督スクリプトには影響されず、要するに親の加護を受けておりまして、「グループ解散後」になった瞬間、つまり「空オブジェクト(親)が消滅した瞬間」に監督スクリプトの影響を受けるような仕組みを作っていきます。
次回以降、ブロックセットオブジェクト(親)のスクリプトを具体的に書いていきます。よろしくお願いします!!以下、ぷよぷよとのスクリプト作成方針の違いについて、簡単に補足を入れましたので、こちらも参考にして下さい!m(_ _)m
(補足)ぷよぷよとのスクリプト作成方針の違いについて
ちなみに、ぷよぷよでは、ぷよ制作手順1後半でお話した通り、「コンビで活動時」の動きはぷよセットオブジェクト(親)に付けたスクリプトに記述し、「コンビ解散後」の動きは各ぷよに付けたスクリプトに記述しましたね。
これに比べると、今回のテトリスでも、落下時の挙動を制御するのはブロックセットオブジェクト(親)のスクリプトですが、各ブロックには特にスクリプトを紐づけず、代わりに落下後のブロックの動きについては、全て監督スクリプトで記述してしまいます。ぷよぷよでは、フィールド中の各ぷよは各々独立したような動きをするため、各ぷよにもスクリプトを紐づけましたが、テトリスでは、各ブロックはそこまで複雑な挙動はしないため、まぁ監督スクリプトに記述しても良いかな?という判断をしました。
ぷよぷよとテトリスは、どちらも所謂「落ちゲー」というくくりに入り、似たゲームではありますが、勿論お互いに消すルールは異なりますから、結果として、今回は↑のようにスクリプトの書き方の大方針についても違いを出しました。このように、ぷよぷよの時に用いた大方針は、別に全ての落ちゲー制作に共通する話ではありませんし、各ゲームのルールに合ったスクリプトの配置をしていくことを心がけていきましょう!