【Unity】Random.Rangeでオブジェクトをランダムな位置に生成をする

Unity

敵を適当な位置に生成したり、障害物を生成させるときによく使うと思います。

そんなスクリプトを紹介していきます。

準備

ヒエラルキーでオブジェクトの生成を管理する空のオブジェクトを作り、名前を「Spawner」とします。

生成させるオブジェクトも準備しましょう。

僕の場合はプレハブ化させたこの球体を使います。

準備は以上です。

生成スクリプト

プロジェクトウィンドウでCreate>C# Scriptでスクリプトを作りましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class spawner : MonoBehaviour
{
    float timer = 0;
    float SpawnTime = 3.0f;
    [SerializeField] GameObject sphere;

  
    void Update()
    {
        Generate();
    }

    void Generate()
    {
        this.timer += Time.deltaTime;
        if (timer > SpawnTime)
        {
            timer = 0;
            GameObject Sphere = Instantiate(sphere);
            float x = Random.Range(-3, 3);
            float y = Random.Range(1, 6);
            Sphere.transform.position = new Vector3(x, y, 0);
        }
    }
}

このスクリプトをSpawnerにアタッチしましょう。

spawnerを選択し、インスペクターのSphereの項目に生成したいプレハブをアタッチします。

これで実行をしてみますと

ランダムな位置に生成します。

スクリプトの説明

ポイントはこの部分

float x = Random.Range(-3, 3);
float y = Random.Range(1, 6);

ここで生成するプレハブのXとY座標の位置を乱数で指定してます。

X座標は、ー3から2の間

Y座標は、1から5までの間の範囲で生成するようになっています。

注意:Random.Range(-3, 3);この部分ですが、指定した数字未満の値になります。例えば3と書けば2となります。

GameObject Sphere = Instantiate(sphere);でプレハブを生成し、

Sphere.transform.position = new Vector3(x, y, 0);でsphereの生成位置を代入します。

Z座標は「0」で固定しています。

まとめ

Random.Range関数はほかにも便利な使い方があるので、いつか紹介したいと思います。

コメント

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