各インスタンスをそれぞれランダムな方向、ランダムな距離に動かす

ブロック崩しゲームをUnityで作りました。

その中で、それぞれのブロックが自由に動き回る処理を書いたのでそれのメモです。

まずは配列の宣言です。

int型でそれぞれの移動する残り距離(フレーム数)と方向を格納する変数を用意します。

//宣言
int[] frameCount = new int[BLOCK_NUM];
int[] moveDirection = new int[BLOCK_NUM];

次に一フレーム毎に呼ばれるUpdate()関数の中に以下の処理を書きます。

//生きていたら
if (block_alive_flag[i])
{
if(frameCount[i] == 0)
{
moveDirection[i] = gc.Random(1, 4);
frameCount[i] = gc.Random(5, 10);
}
else
{
switch (moveDirection[i])
{
case 1:
if (block_x[i] < 640 - block_w) { block_x[i] += 3; } break; case 2: if (block_x[i] > 0)
{
block_x[i] -= 3;
}
break;
case 3:
if (block_y[i] < 480 - block_h) { block_y[i] += 3; } break; case 4: if (block_y[i] > 0)
{
block_y[i] -= 3;
}
break;
}
frameCount[i]--;
}

最初のif()でそのブロックの生存状況を調べています。ブロックが生きていたら移動に関する処理を行います。

frameCountが0、すなわち移動していないときに、Rand関数を実行して、移動距離と方向を決めています。

次の処理で移動方向に合わせてブロックの座標を更新します。

最後の処理で移動残り距離(frameCount)を-1しています。

流れとしてはこんな感じです。

このコードは複数のものをランダムに動かしたい時に、使えると思います。

さらに良い書き方あったら教えて欲しいです。

今回は以上です。

ITCSharp, Unity

Posted by shu