スクリプトからPrefabのインスタンスを生成する方法【Unity】

もくじ

Prefabって何ぞや?

 ゲームオブジェクトを簡単に量産するための機能です。同じ敵キャラクターを複数登場させたいときなどに使われます。

鯛焼きを作るとき、毎回生地を鯛の形に整えていたらメチャメチャ大変ですよね。ですから金型を使ってラクをします。ゲームを作るときも同じように、毎回ゲームオブジェクトを一から作るのは大変なのでprefabを使って簡単にやってしまおうということです。

鯛焼きの金型のようなものだと思ってください。

 

prefabの作成方法

卵のオブジェクトを作ってprefab化してみようと思います。

オブジェクトの作成

f:id:penyop:20210516120131p:plain
Sphereを選択

Hierarchyウィンドウで右クリック >3D Object > Sphereを選択してSphereオブジェクトを作成します。

f:id:penyop:20210516121025p:plain
球体が作成された

 こんな感じの球体が作成されました。わかりやすいように名前をSphereからEggに変更しました。

 

球体の形を変える

f:id:penyop:20210516121846p:plain
Y軸のScaleを変更

そのままではただの球体にしか見えないので、Y軸の大きさを変更して卵っぽくします。

Hierarchyウィンドウ > 「Egg」を選択 > Inspectorウィンドウ > Transform > Y軸のScaleを1.3に変更します。

 

Prefab化

f:id:penyop:20210516125203p:plain
EggをProjectウィンドウへ放り込む

EggをProjectウィンドウへ放り込む

HierarchyウィンドウのEggオブジェクトをProjectウィンドウにドラッグ&ドロップします。


f:id:penyop:20210516125813p:plain
EggのPrefabが作成された

たったこれだけでPrefabを作成することができます。簡単ですね。

 

Prefabからインスタンスを作成

f:id:penyop:20210516135956p:plain
PrefabをSceneビューに放り込む

先ほど作ったプレハブをSceneビューにドラッグ&ドロップで放り込みましょう。

 

f:id:penyop:20210516140453p:plain
Prefabからインスタンスが生成された

すると、同じ形の卵が生成されました!

これでドラッグ&ドロップだけで簡単に卵が量産できますね。

 

スクリプトからPrefabのインスタンスを生成する

Prefabのインスタンススクリプトからも生成することができます。活用方法として以下のような例があります。

・シューティンゲームで弾を発射するとき

・ゲーム中盤で敵キャラを出現させるとき

・ゲームオーバー後のコンティニュー時にプレイヤーをもう一度出現させるとき

などなど……

C#スクリプトを作成

f:id:penyop:20210516163313p:plain
C#スクリプトを作成

Projectウィンドウで右クリック > Create > C# Scriptでスクリプトを作成します。名前は何でもいいのですが今回は「GameManager」にしました。

 

スクリプトからインスタンス生成

スクリプトの中身を書いていきます。

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

public class GameManager : MonoBehaviour
{

    public GameObject eggPrefab;  // 卵のプレハブ

    void Start()
    {
        // Prefabからインスタンスを生成
        Instantiate(eggPrefab, new Vector3(2.0f, 0.0f, 0.0f), Quaternion.identity);
    }
}

Instantiateメソッドでインスタンスを生成することができます。第1引数にオブジェクト、第2引数にオブジェクトの位置、第3引数にオブジェクトの向きの値が入ります。
ちなみに「Instantiate」はインスタンシエイトと読むらしいです。

空のゲームオブジェクトを作成

スクリプトを実行させるために空のゲームオブジェクトを作ります。

f:id:penyop:20210516182135p:plain
空のゲームオブジェクトを作成

Hierarchyウィンドウで右クリック > Create Emptyを選択して、空のゲームオブジェクトを作成します。
名前を「GameManager」としました。

スクリプトを空のゲームオブジェクトにアタッチ

f:id:penyop:20210516182948p:plain
スクリプトを空のゲームオブジェクトにアタッチ

ProjectウィンドウのGameManagerスクリプトをHierarchyウィンドウのGameManagerオブジェクトにドラッグ&ドロップしましょう。

プレハブの指定

f:id:penyop:20210516183945p:plain
卵のプレハブを登録

卵のプレハブをInspectorウィンドウの「Egg Prefab」の部分にドラッグ&ドロップします。これで準備完了です!
実行すると……

f:id:penyop:20210516184403p:plain
スクリプトから卵が生成された

スクリプトからPrefabのインスタンスを生成することができました。