Unityではじめてのテトリス風落ちゲー制作記 ~その6 ブロック配置編~

Unity

Unityでテトリス風落ちゲーを作ってみたいけど、何から手を付けていいか分からない。私もそんな一人です。ここでは、自分の勉強も含めて、簡単なテトリス風落ちゲーを制作していく過程を掲載していきます。

この連載を最後まで読めば、このようなテトリス風落ちゲーが1人で作れるようになります。

別ウィンドウで開く場合はこちら

今回はブロック配置編です。

前回記事では、落下ブロックの当たり判定を作成し、落下ブロックが壁ブロックに接触した際の移動を拘束するプログラムを作成しました。更に壁ブロックに着地すると、次の落下ブロックが落ちてくるようにしました。

今回は、 落下ブロックが着地したら、配置ブロックへ変換させるプログラムの解説をします。

この記事はこんな人におすすめ!

  • 用意されたアセットを極力使わず、自分の力でゲームを作りたい
  • プログラミング初心者で1つ1つ丁寧に解説した記事が読みたい
  • Unity初心者がスキルを上げながらゲームを制作していく過程を見たい

本ゲーム制作方法は自己流です。もっと簡単に作る方法もあると思いますので、ご了承下さい。

落下ブロックを配置ブロックに変換

落下ブロックが着地確定したら、落下ブロックを配置ブロックに変換します。配置ブロックの状態は「3」と定義しましたので、落下ブロックが着地した位置のブロック状態を「3」にします。

その後、次の落下ブロックを初期位置にセットし、落下開始させます。

void Update() {
    switch(gameStat){
        case START:
            /*
            (省略)
            */
            break;
        case GROUND:
            /*
            (省略)
            */
            if(groundCountTime >= 1){
                // 落下ブロックを配置ブロックに変換
                for(int i=0; i<4; i++){
                    for(int j=0; j<4; j++){
                        if(fallBlockStat[j,i] == 2){
                            blockStat[j +fallBlockPosY, i +fallBlockPosX] = 3;
                        }
                    }
                }

                // 次の落下ブロックを初期位置にセットし、落下開始
                fallBlockPosX = fallBlockInitPosX;
                fallBlockPosY = fallBlockInitPosY;
                blockNum = Random.Range(0, 8);
                rot = 0;
                fallBlockStat = fallBlockSet.set(blockNum, rot);
                gameStat = START;
                groundCountTime = 0;
            }
            break;
        case ERASE:
            break;
            
        case GAMEOVER:
            break;
    }
}

配置ブロックの画面表示

ゲーム画面に配置ブロックを表示させます。配置ブロックPrefabをブロック状態が「3」の位置にセットします。

public GameObject placementBlockPfb; // 配置ブロックPrefab
    
void Update() {
    // 配置ブロックの画面表示
    for(int i=1; i<11; i++){
        for(int j=1; j<18; j++){
            Destroy(blockObj[j,i]);
            if(blockStat[j,i] == 3){
                blockObj[j,i] = Instantiate(placementBlockPfb, new Vector3(i + OX, -j + OY, 0), Quaternion.identity);  
            }
        }
    }
}

Unityの画面に戻ったら、Game ControllerコンポーネントのPlacement Block Pfb欄にPlacement Blockをセットしましょう。

動作確認

まとめ

今回は落下ブロック配置編として、 落下ブロックが着地したら、配置ブロックへ変換させるプログラム 作成を解説しました。

次回はゲームの肝である、横一列揃ったら消去するプログラムの解説をしていく予定です。

最後までお読み頂きありがとうございました。