LemonteaのUnity部屋

UnityとかC#のおはなしです~

初めてのスクリプト(4) Instantiateで複製・大量生産

こんにちは。レモンティーです。

今回は、オブジェクトの複製です。

これによって、無限わきの敵キャラを実装したり、
自動でステージを生成したりできるようになります。


今回つかうのは、Instantiateです。

以下、複製したいgameObjectをXとします。

このとき、Instantiateは次のようにつかいます。

Instantiate(X);

これで、Xがコピーされます。


これを↓のように使うと

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

public class CreateCube : MonoBehaviour {
    public GameObject Cube;
    float time = 5;
	void Update () {
        time -= Time.deltaTime;
        if(time <= 0)
        {
            Instantiate(Cube);
            time =5;
        }
	}
}

こんな感じになります。

youtu.be


たしかにコピーされてますね。


しかしこれだと、元のプレハブのtransformと同じ場所にコピーされてしまいます。
コピーする座標も指定してみましょう。

Instantiate(X, Vector3 position, Quaternion rotation);

↑のように二つ目の引数にVector3で座標を
三つ目の引数で回転を指定してあげればOKです。

もし回転させなくていい場合(元と同じでいい場合)
はQuaternion.identityとします。

なので、実際に使うとこんな感じです。

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

public class CreateCube : MonoBehaviour {
    public GameObject Cube;
    float time = 3;
	void Update () {
        time -= Time.deltaTime;
        if(time <= 0)
        {
            Vector3 CreatePoint = new Vector3(0, 0, 0); 
            Instantiate(Cube,CreatePoint,Quaternion.identity);
            time =3;
        }
	}
}

ランダムな整数はRandom.Range(int Min,int Max+1)で得られますから、
複製する場所をランダムにしたいときは↓のようにします。

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

public class CreateCube : MonoBehaviour {
    public GameObject Cube;
    float time = 3;
	void Update () {
        time -= Time.deltaTime;
        if(time <= 0)
        {
            Vector3 CreatePoint = new Vector3(Random.Range(0,5), Random.Range(0,5), 4); 
            Instantiate(Cube,CreatePoint,Quaternion.identity);
            time =3;
        }
	}
}

また、他のオブジェクトの子としてInstantiateすることもできます。
その場合は、親にするオブジェクトのtransformを引数にわたします。

 Instantiate(X, Transform parent);
Instantiate(X, Vector3 position, Quaternion rotation, Transform parent);

こんな感じです。
今回はこれでおわりです


Next

http://sawalemounity.hatenablog.com/entry/2017/08/14/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%285%29_%E3%82%B7%E3%83%BC%E3%83%B3%E9%81%B7%E7%A7%BB_sawalemounity.hatenablog.com

関連
今回のスクリプトの使用
sawalemounity.hatenablog.com