【Unity 】ランダムな位置に複数のゲームオブジェクトを配置する

前回Unity で指定されたプレハブからインスタンスを複製し、決められた位置に配置しました。
今回は、1 個ではなく 100 個のインスタンスを複製し、ランダムな位置に配置する処理を追加します。
※ Unity は 2021.3.14f1、 OS は Windows 10 です。

ループ処理で 100 個複製する

まずは for 文でループ処理を 100 回繰り返し、その中で Instantiate 関数を使ってプレハブからインスタンスを作成します。

    void Start()
    {
        Vector3 pos = new Vector3();
        for (int i = 0; i < 100; i++)
        {
            // 出現場所(固定)を設定します。
            pos.x = 5f;
            pos.y = 5f;
            pos.z = 0f;
            // Prefab のインスタンスを作成します。
            Instantiate(Prefab, pos, Quaternion.identity);
        }
    }

同じ位置に重なっているためテストプレイ中の Game ウィンドウでは1枚にしか見えませんが、 Hierarchy ウィンドウにはたくさんのゲームオブジェクトが作成されています。

同じ位置に重なっていますが 100 個の「桜の花びら」が移動しています。

同じ位置に重なっていますが 100 個の「桜の花びら」が移動しています。

出現範囲を指定する

ランダムといってもカメラの画角にきちんと表示されるようにしたいものです。
そこで出現範囲を Rect により指定できるようにします。
以前に Prefab を指定したときのように public 指定で Manager クラスの Rect メンバ変数を用意します。

    /// 花びらの出現を許可する領域を設定します。
    public Rect RespawnArea;

これで出現範囲を Unity エディタから指定できるようになりました。初期状態ではシーンのマスは1mなので、縦は画角より上の 10 m の範囲で 5 ~ 15 m、横は -9 ~ +9 mとします。

シーン上のマスの個数により花びらの出現範囲を決めます。

シーン上のマスの個数により花びらの出現範囲を決めます。

Rect に置き換えると X = -9, Y = 9, W = 18, H = 3 です。
※ Unity の Rect は水平方向は + 側が右、垂直方向は + 側が下になります。詳しくは「UnityEngine.Rect – Unity スクリプトリファレンス」を参照してください。

出現可能範囲(Rect)をUnityエディタ上で編集できるようになりました。

出現可能範囲(Rect)をUnityエディタ上で編集できるようになりました。

今回はシーンのマスの個数からサイズを計算しましたが、シーン上に Rect の範囲を表す四角形を表示したり、それを直接編集して出現範囲の Rect を直感的に編集できるように次回以降死体と思います。

出現範囲内で乱数を発生させる

指定された範囲からランダムな値を得るには、Random.Range 関数を使います。
Range(0f, 10f) の場合 0 ~ 10 の範囲でランダムな値を一つ返します。
それを配置位置 pos の X, Y にそれぞれ設定します。

今回、乱数で得るのは基準の X, Y からの距離です。
この距離は 0 ~ RespawnArea.width, height です。
width は横幅、height は縦幅を表します。

    void Start()
    {
        Vector3 pos = new Vector3();
        for (int i = 0; i < 100; i++)
        {
            // 出現場所(固定)を設定します。
            pos.x = RespawnArea.x + Random.Range(0f, RespawnArea.width);
            pos.y = RespawnArea.y + Random.Range(0f, RespawnArea.height);
            pos.z = 0f;
            // Prefab のインスタンスを作成します。
            Instantiate(Prefab, pos, Quaternion.identity);
        }
    }

これにより 100 個の「桜の花びら」ゲームオブジェクトが出現範囲内でランダムに作成・配置され、舞い降りてきました。

画面の上側でランダムに配置された花びらがいっきに舞い落ちてきました。

画面の上側でランダムに配置された花びらがいっきに舞い落ちてきました。

まだ、花びらが同じ動きをしたりするので、今後も改善していきたいと思います。

 

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました