Unityでスクリプトからオブジェクトを生成する方法について解説します。
簡単にいってしまうと、オブジェクトを生成する際はInstantiate()を使います。
スクリプトから簡単にオブジェクトを生成できるので、ぜひ覚えておきましょう!
■Instantiateの使い方
Instamtiate()の使い方をさっそく解説していきます。
説明を簡潔にするため、以下のものをあらかじめ用意しておいてください。( )は説明する際に利用するnameです。
※Unity超初心者の方は、( )内のnameと同じようにそれぞれ作成していただければ、記事を読みつつInstamtiate()について学べます。
・生成元のゲームオブジェクト:(Cube、Script内ではobj)
・オブジェクト生成コードを記述するc#スクリプト(InstantiateScript)
・スクリプトをアタッチするゲームオブジェクト(GameManager)
InstamtiateScriptへ変数定義をします。
public GameObject obj;
・オブジェクトを生成する
もっともシンプルにオブジェクトを生成するコードです。
//Instantiate(生成したいGameObject); Instantiate(obj);
1:InstamtiateScriptをGameManagerへアタッチ
2:public変数のobjにCubeを入れる
実行するとオブジェクトが生成されます。生成される位置、姿勢は生成元のオブジェクトとまったく同じになります。
・生成するオブジェクトの位置、姿勢を指定する
//Instantiate(生成したいGameObject, 位置, 姿勢); Instantiate(obj, new Vector3(0,0,0), Quaternion.identity);
生成したいオブジェクトの位置、姿勢を指定できます。こちらを覚えればInstamtiate()は難なく使いこなせるようになります。
・生成したいオブジェクトの親子関係を指定
説明のため変数名を変えます。
public GameObject childObject; public Transform parent;
Instantiate(childObject, new Vector3(0, 0, 0), Quaternion.identity, parent);
childObjectに生成したいオブジェクトを、parentに親にしたいオブジェクトをアタッチします。
GameObjectを生成するときに、自動で親子関係を持たせてくれます。
■Instantiateを使った具体例の紹介
Instamtiate()を使った具体的な利用例を紹介します。
・For文で大量に生成
using UnityEngine;
using System.Collections;
public class InstantiateScript : MonoBehaviour
{
public GameObject prefab;
void Start()
{
for (int i = 0; i < 10; i++)
{
Instantiate(prefab, new Vector3(i * 2.0F, 0, 0), Quaternion.identity);
}
}
}
for文内に記述することで、複数のオブジェクトをまとめて生成できます。
・ボタンクリックで生成、移動
using UnityEngine;
using System.Collections;
public class InstantiateScript : MonoBehaviour
{
public Rigidbody projectile;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody clone;
clone = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody;
clone.velocity = transform.TransformDirection(Vector3.forward * 100);
}
}
}
左ボタンをクリックすることで、生成したオブジェクトを移動させます。
発射口を指定すれば、FPSなどシューティングゲームに使えるコードです。
Unityのオブジェクト生成についてさらに詳しく知りたい方は、Unityのリファレンスガイドを確認してみてください。

なお、具体例として紹介したコードも、こちらのリファレンスで公開されていたものを利用しています。
今回はここまでです。最後まで読んでいただきありがとうございました。

