[Unity] Prefabでオブジェクトを複数生成(コピー)する

どうも、tatsuです!

今回はPrefabを使ったオブジェクトの複数生成(コピー)について説明しようと思います。

Prefab(プレハブ)とは?

Prefabとは、オブジェクトの雛形のようなものです。
Prefabにはオブジェクトを作るのに必要な情報が書かれており、その情報をもとにオブジェクトを作り出します。
 
Unityではヒエラルキーからオブジェクトを1つずつ追加することができます。
ですが同じオブジェクトをランダムに複数生成したいといった場合はどうしましょう?
例えば、敵だったり弾だったり・・・
 
そのような同じものをたくさん作りたい場合にPrefabを使うと、スクリプトでオブジェクトの生成を簡単に行うことができます。
JavaやC#などでクラスを勉強したことがある方なら、Prefab = クラス と解釈してもらってかまいません。

Prefab(プレハブ)の作り方

例えば以下のようなballオブジェクトのPrefabを作成したいと思います。

作り方は簡単で、図のようにオブジェクトをAssetsにドラッグ&ドロップするだけです。

クリックすると下に「ball.prefab」となっていればPrefabが生成されています。
わかりやすいように「ballPrefab」などと名前を変えておくと良いでしょう。
また、シーンに配置されている方のballPrefabは使わないので削除しておいてください。

スクリプトでPrefabを使って複数インスタンスを生成する

それではスクリプトでPrefabを使ってみましょう!
新しく「ballCreateScript」を作ってください。※この記事ではC#Scriptを説明しています。
中身を以下のようにします。

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

public class ballCreateScript : MonoBehaviour {

	// インスペクタからこのスクリプトにballPrefabをアタッチすることで、変数にballPrefabが格納される
	public GameObject ballPrefab;
	

	void Start () {
		// 10個ランダムな場所にballを生成する
		for(int i = 0; i < 10; i++){
			// Instantiateの引数にPrefabを渡すことでインスタンスを生成する
			GameObject ball = Instantiate(ballPrefab) as GameObject;
			// ランダムな場所に配置する
			ball.transform.position = new Vector2(Random.Range(-7,7), Random.Range(-4,4));
		}
	}
}

このスクリプトでは、ゲーム開始時に10個のボールをランダムに表示するように書きました。

PrefabをballCreateScriptにアタッチする

スクリプトができたら、Prefabをスクリプトにアタッチします。
これによってスクリプトの変数にPrefabが格納され、使用することができます。
まずballCreateScriptをクリックし、インスペクタでballPrefabを指定します。

これで完了です。

ballCreateScriptを空GameObjectにアタッチする

スクリプトはなんらかのゲームオブジェクトにアタッチしないと使用できないため、空のゲームオブジェクトを作成します。
ヒエラルキーから[Create Empty]を選択して空のゲームオブジェクトを作成してください。
 
作成できたら、ballCreateScriptをアタッチします。

動作確認

ここまでできたら保存して、ゲームをスタートしてください。
以下のようにランダムに10個表示されていたら成功です!

補足
Prefabによって生成されたオブジェクトに動きを付ける場合は、ballPrefabにオブジェクト用のスクリプトをアタッチしてください。

まとめ

お疲れ様でした、いかがでしたか?
Prefabの概念と作り方、わかっていただけましたでしょうか。
大量にオブジェクトを表示したい場合などに役に立つので、ぜひ覚えておいてくださいね!
それでは!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です