スクリプトからPrefabのインスタンスを生成する方法【Unity】
もくじ
Prefabって何ぞや?
ゲームオブジェクトを簡単に量産するための機能です。同じ敵キャラクターを複数登場させたいときなどに使われます。
鯛焼きを作るとき、毎回生地を鯛の形に整えていたらメチャメチャ大変ですよね。ですから金型を使ってラクをします。ゲームを作るときも同じように、毎回ゲームオブジェクトを一から作るのは大変なのでprefabを使って簡単にやってしまおうということです。
鯛焼きの金型のようなものだと思ってください。
prefabの作成方法
卵のオブジェクトを作ってprefab化してみようと思います。
オブジェクトの作成
Hierarchyウィンドウで右クリック >3D Object > Sphereを選択してSphereオブジェクトを作成します。
こんな感じの球体が作成されました。わかりやすいように名前をSphereからEggに変更しました。
球体の形を変える
そのままではただの球体にしか見えないので、Y軸の大きさを変更して卵っぽくします。
Hierarchyウィンドウ > 「Egg」を選択 > Inspectorウィンドウ > Transform > Y軸のScaleを1.3に変更します。
Prefab化
EggをProjectウィンドウへ放り込む
HierarchyウィンドウのEggオブジェクトをProjectウィンドウにドラッグ&ドロップします。
たったこれだけでPrefabを作成することができます。簡単ですね。
Prefabからインスタンスを作成
先ほど作ったプレハブをSceneビューにドラッグ&ドロップで放り込みましょう。
すると、同じ形の卵が生成されました!
これでドラッグ&ドロップだけで簡単に卵が量産できますね。
スクリプトからPrefabのインスタンスを生成する
Prefabのインスタンスはスクリプトからも生成することができます。活用方法として以下のような例があります。
・シューティンゲームで弾を発射するとき
・ゲーム中盤で敵キャラを出現させるとき
・ゲームオーバー後のコンティニュー時にプレイヤーをもう一度出現させるとき
などなど……
スクリプトからインスタンス生成
スクリプトの中身を書いていきます。
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」はインスタンシエイトと読むらしいです。
空のゲームオブジェクトを作成
スクリプトを実行させるために空のゲームオブジェクトを作ります。
Hierarchyウィンドウで右クリック > Create Emptyを選択して、空のゲームオブジェクトを作成します。
名前を「GameManager」としました。