【Unity初心者向け】作りながら覚えるゲーム制作講座 #6 乱数で弾の位置と速さをランダムに
前回の講座では、弾を作って自機が弾に当たるとゲームオーバーになる処理を実装しました!
ただ、弾が毎回同じ場所に繰り返し出現しているだけで、まだゲームとしては物足りなかったですね。
今回は弾の動きに変化をつけるため、発射位置と速さをランダムにしたい思います!
そして、弾の数を増やしてゲームの難易度を良い感じに調整します!
弾の出現位置をランダムにする
まずは、出現する位置をランダムにしてみましょう。
ここでは、X座標が -8.0 ~ 8.0 の間になるようにしてみます。
乱数について
座標などの値をランダムにするには、ランダムな数値を生成して、それを設定する必要があります。
ランダムな数値のことを、 「乱数」 と呼びます!
Unity で乱数を使うには、 Random.Range というものを使います。
具体的には、 Random.Range(乱数の最小値, 乱数の最大値) と書くことで乱数を生成できます。
例えば、 -8.0 ~ 8.0 の乱数にしたい場合、 Random.Range(-8.0f, 8.0f) と書きます。
乱数で位置を設定
では、実際に乱数で位置を設定してみましょう!
今まで X座標 は 0.0 という定数を使っていましたが、これを x という変数に置き換えます。
そして、 x の値を乱数を使って設定するようにします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour
{
float x = 0.0f;
float y = 12.0f;
// Update is called once per frame
void Update()
{
// 下に移動
y -= 10.0f * Time.deltaTime;
// 地面より下に行った場合
if (y < 0.0f)
{
// 初期化
x = Random.Range(-8.0f, 8.0f);
y = 12.0f;
}
// 位置を更新
transform.localPosition = new Vector3(x, y, 0);
}
}
これで、弾の位置が毎回ランダムになるようになりましたね!
今回は float(小数)型 の乱数を生成しました。
ちなみに、 int(整数)型 の乱数も同じ書き方で生成できます。
ただ、注意点として int 型の乱数の場合は最大値は生成される乱数に含まれません。
例えば、 Random.Range(0, 10) と書くと 0 ~ 9 までの乱数になります。
弾の速さをランダムにする
続いて、落下する速さもランダムにしてみましょう。
ここでは 5.0 ~ 15.0 の間になるようにしてみます。
乱数で速さを設定
今まで速さは 5.0 という定数を使っていましたが、これを speed という変数に置き換えます。
そして、 speed の値も乱数を使って設定するようにします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour
{
float x = 0.0f;
float y = 12.0f;
float speed = 10.0f;
// Update is called once per frame
void Update()
{
// 下に移動
y -= speed * Time.deltaTime;
// 地面より下に行った場合
if (y < 0.0f)
{
// 初期化
x = Random.Range(-8.0f, 8.0f);
y = 12.0f;
speed = Random.Range(5.0f, 15.0f);
}
// 位置を更新
transform.localPosition = new Vector3(x, y, 0);
}
}
これで、弾の速さも毎回ランダムになるようになりました!
最初の落下からランダムが適用されるようにする
これで完全にランダムになったように見えますが、実は最初の落下だけは毎回同じ動きになっています。
これは、ランダムが適用されるのが if 文に入った時なので、最初に地面に着くまではランダムが適用されていないのです。
これを修正するには、 y の初期値を 0.0 より小さい値にしてください。
ここでは -1.0 にしてみます。
float y = -1.0f;
これで、開始後すぐに if 文の中に入るので、実質最初の落下からランダムな動きになります!
本当は初期化処理を分けて書いたほうが良いのですが、今回は一番簡単な方法で実現させています。
弾を増やす
では、最後に弾の数を増やしてみましょう!
作った Bullet オブジェクトを好きな数だけコピー&ペーストしてください。
ここでは 5 個に増やしてみます。
ゲームを実行すると、それぞれの弾がちゃんと独立して動作していますね!
まとめ
これで、弾が最終形態になりました。
次回はいよいよクライマックスで、ゴール地点とクリア/ゲームオーバー表示を作成します!
次回でついにゲームが完成です!!