にしのクエスト2

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

20221224103753

Unityで学ぶプログラミング  テトリス的を作る(3)ブロックの色を変える続き

こんにちは!

今回からテトリス的なものを作っていきます。長い連載にな
りますので、気長にお付き合いください。

なお、プログラムの内容は難しいので、初心者には向きませ
ん。いきなり作るのは厳しいのでよろしくお願いします。
また、説明も大幅に省いていきます。

最後に注意事項
ご紹介するのはあくまで「テトリス的」です。そのものでは
ありませんし、非常にシンプルに遊べるだけのものです。

連載終了後に、より詳しい技術的な解説&追加機能を加えた
電子書籍を発行する予定ですので、よろしくお願いします。


今回はブロックに色をつける続きです。
ブロックのprefabにアタッチするプログラムBlockCを書いて
いきます。

変数部分ですが、

//座標を格納
int posx;
int posy;

//GameDirectorの格納
GameObject GD;
GameC GDP;

//色を格納
public Material[] MT;
 
//Blockの色
int BlkCol;

//時間
float delta;

Game Directorを収納する変数。
複数の色を格納する変数。

そして、時間を測る変数を作っておきます。

前回も書いたのですが、ブロックは自分の座標と合致する配列を読み、
自分の色を変化させます。

しかし、あまり頻繁にやると重たいので時間ごとに読ませます。

void Start()
{
//座標の取得
posx=(int)this.transform.position.x;
posy=(int)this.transform.position.y*-1;
 
//GameDirectorの発見
GD = GameObject.Find("GameDirector");
//スクリプトを取得する
GDP = GD.GetComponent<GameC>();
}

ここでは、posxとyに自分の座標をセットします。−1をかけているのは、
並びが逆側になっているからなのですが・・・

void Update()
{

//時間の加算
delta += Time.deltaTime;
 
//時間経過後
if(delta>=0.1f){
//座標に該当する番地の値を読み込む
BlkCol=GDP.field[posx,posy];

//その値によって色を変化させる
this.GetComponent<Renderer>().material=MT[BlkCol];

//時間をリセット
delta=0;
}
}

とりあえず、0.1秒にしていますが、もっと速くてもいいかもしれません。i

f:id:koharuwest:20210105114953p:plain

そして、prefabのMTのところをsize10にして、
色をセットしておきますが、0、1、9だけでOKです。

・・・まあ、ここだけの話ですが。本当は、工夫すれば色は
いっぱいつかえるというわけですよ。

というわけで、

f:id:koharuwest:20210105115239p:plain

ステージが表示されました!


次回は、移動するブロックを表示してみましょう。

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