にしのクエスト2

情報処理技術者試験と資格学校講師の日常

20221224103753

Unityで学ぶプログラミング 箱を積み上げるゲーム(6)床に接したら全部消える

(注意)
この連載は、ある程度ゲームを作ったことある人の
ためのものです。「アタッチ」とか「C#スクリプト
の作成」とか「カメラアングルの変更」とか、その
レベルの話は
省略しています。よろしくお願いしま
す。
  

 

 

www.nsnq.tech

 


前回の続きです。

無秩序に置けるブロックをなんとかします。
床に接してしまったブロックが1個でもあれば。
全部まとめて今までのを消してしまいます。
ただし、1個目はちゃんと置けるようにしないと。

スコアの数字で1個目かどうかを判断しています。

(blockCのCollision改変です)

    private void OnCollisionEnter(Collision collision)
    {
        //最初のブロックは消えないからフラグを落下OKにする
        if (collision.gameObject.name=="Field"&&GC.Score==1) {
            GC.flag = 0;                   
        }

        //地面に接したら今までの全部消える
        if (collision.gameObject.name == "Field" && GC.Score > 1)
        {
            //Blocksタグの付いたものを格納し、
            GameObject[] blks = GameObject.FindGameObjectsWithTag("Blocks");

            //オブジェクトに数を数えさせて、その分だけ実行
            foreach (GameObject blk in blks)
            {
                //消す
                Destroy(blk);
                //Flag戻す
                GC.flag = 0;
                //スコアも戻す
                GC.Score = 0;
            }

        }

        //ブロックの上に落ちたのはflag普通に返す
        if (collision.gameObject.name == "Block(Clone)")
        {
            GC.flag = 0;

        }
    }


for eachやらwithTagなどの技術が出てきます。
ブロックのPrefabにはBlocksタグをつけましたが、
ここでそれが役に立ってきます。

お?もう既にこれでもゲームとして成立しそうです・・・。
ちょっと難しいけど。

ブロックが積み上がると射出が引っかかる問題は次回
にしましょう。


質問があればDMやらコメントをお願いします。

それではよきプログラミングライフを!
またね。