6. プレファブを使ってみよう

ここではUnityのシンボル機能、プレファブの使い方を学びます プレファブを利用すると、プロジェクトウィンドウに配置している元の素材を利用して、ステージ上に自由にいくつでもオブジェクトを生成できるようになります。

元となるオブジェクトを作成しよう

まずはプレファブの元となる3Dオブジェクトを作成します。

  1. ヒエラルキーウィンドウから、Create > 3D Object > Sphere で球体を作成しましょう
  2. 座標をリセットしておきたいので、インスペクタウィンドウ > Transform > ギアアイコン > Reset を実行しましょう
  3. プログラムで動的に生成した後、衝突させたり物理的な動きを加えたいのでRigidBodyを追加しましょう

オブジェクトをプレファブに変換しよう

次に作成したオブジェクトをプレファブに変更します。

オブジェクトをプレファブに変更するには、ヒエラルキーウィンドウ上のSphereオブジェクトを、プロジェクトウィンドウ上にドラッグする事でプレファブ化する事ができるようになっています。

プレファブに変更した要素は

  • インスペクタウィンドウ上に表示されているアイコンが水色になっている
  • ヒエラルキーウィンドウ上に表示されている名前が水色になっている

など、Unityエディタの表示上でプレファブである事が確認できるようになっているので、覚えておきましょう。

作成したプレファブは /Assets/Prefab 以下に入れておきましょう。

プレファブを作成し、スクリプトを書き加えると、ヒエラルキーウィンドウやプロジェクトウィンドウが煩雑になってきます。毎回綺麗に整理するようにこころがけましょう。

プレファブを登場させるスクリプトを作成しよう

次に先ほど作成したプレファブを生成するスクリプトを書いていきましょう。

  1. プロジェクトウィンドウから、Create > C# Script でスクリプトを作成し Spawner と名前をつけます
  2. 中身には下記のプログラムを書いておきます
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{

	//外部からオリジナルのプレファブを登録できるようにする
	public GameObject original;

	void Update()
	{

		//スペースキーを押している場合には プレファブを複製する
		if (Input.GetKey(KeyCode.Space))
		{
			// transformの位置にoriginalを複製する
			Instantiate(original, transform.position, Quaternion.identity);
		}
	}
}

プレファブを登場させるゲームオブジェクトを作成しよう

最後にステージ上にプレファブを登場させるゲームオブジェクトを作成します。

まず、スクリプトを動かす為の空のゲームオブジェクトを作成します。 下記の3つの方法で作成する事ができるようになっています。

  • メインメニューから、GameObject > Create Empty
  • ヒエラルキーウィンドウから、Create > Create Empty
  • ヒエラルキーウィンドウで Cmd Shift N

また、作成したゲームオブジェクトですが、

  • 名前をGameObjectから、Spawnerと変更しておきましょう
  • 座標をリセットしておきたいので、インスペクタウィンドウ > Transform > ギアアイコン > Reset を実行しましょう

次に今作成したゲームオブジェクトに先ほど作成したスクリプトをアタッチします。

最後に、インスペクタウィンドウ上のスクリプトに表示されている値、Originalに生成するプレファブを登録します。 プロジェクトウィンドウのプレファブSphereを、インスペクタウィンドウにドラッグドロップして登録ができます。

再生してみよう!

再生する前に、現在ステージ上に配置されているオリジナルのSphereは必要が無いので削除しておきましょう。

  • Cmnd Pでプロジェクトを再生し、Speceキーを押すとプレファブが大量に生成されます。
  • Cubeのプレファブを作成してみよう
  • プレファブのマテリアルやPhysicマテリアルを変更してみよう
  • 地面を作成しよう
  • 画面外に飛び去ったオブジェクトを削除してみよう
  • 0.5秒ごとに1つ生成されるようにしてみよう
  • 生成したオブジェクトに力を加えてみよう