プレハブを繰り返し出現させるというよりも、異なるプレハブを順番に出現させたいといったシーンも多いのではないでしょうか。
種類の違うPrefabをランダムで出して、左から右へ順番に移動させるプログラムを作ってみました。
関連記事:
重複せずランダムでオブジェクトを並べる
重複無しでリストからランダム抽出(シャッフル)
ランダム表示したPrefabを順に配列に入れる
10分の1の確率で異なるPrefabを生成
配列内のオブジェクトを等間隔に並べる
移動のスクリプトを作成
Cube1とCube2を作成します。
それぞれ別のマテリアルをつけています。
CubeMove.csを作成して、Cube1とCube2に追加しましょう。
CubeMove.csを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float speed = 5; void Update() { transform.position += new Vector3(Time.deltaTime * speed, 0, 0); if(transform.position.x >= 10) { Destroy(gameObject); } } } |
ここでゲームプレイして動きを確認しましょう。
Cubeがずっと動いていって、Xが10のところで消えます。
ランダム出現のスクリプト
Cube1、Cube2をそれぞれPrefab化しましょう。
Cube1とCube2の元データは削除しておきます。
空のオブジェクトを作成します。
GameObjectの名前で空のオブジェクトができました。
GameManager.csを作成して、GameObjectに追加しましょう。
GameManager.csを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameManager : MonoBehaviour { public GameObject[] CubePrefabs; private float time; private int number; void Start() { time = 1.0f; } void Update() { time -= Time.deltaTime; if(time <= 0.0f) { time = 1.0f; number = Random.Range (0, CubePrefabs.Length); Instantiate(CubePrefabs[number], new Vector3(-10, 0, 0), Quaternion.identity); } } } |
GameManagerのインスペクターを確認します。
CubePrefabのフィールド内、サイズには2を入力します。
要素が2つ表示されるので、ここにはCube1とCube2を入れましょう。
Random.Rangeの値が整数の場合、最大値はその整数を含めません。
CubePrefabs.Lengthは整数なので2-1=1ということになり、要素0と要素1のどちらかがランダム出現します。
ゲームプレイしてみましょう。
1秒おきにランダムで、左から右へプレハブが移動していくのが確認できます。
関連記事:
重複せずランダムでオブジェクトを並べる
重複無しでリストからランダム抽出(シャッフル)
ランダム表示したPrefabを順に配列に入れる
10分の1の確率で異なるPrefabを生成
配列内のオブジェクトを等間隔に並べる