Your 3D

【Unity】オブジェクトを生成する方法を解説!【スクリプトから生成できる】

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のリファレンスガイドを確認してみてください。

Unity - Scripting API: Object.Instantiate

なお、具体例として紹介したコードも、こちらのリファレンスで公開されていたものを利用しています。

今回はここまでです。最後まで読んでいただきありがとうございました。

 

モバイルバージョンを終了