Unity C# 生成 Instantiate

 

(二)    隨機地點生成隨機物件

 

  • 此篇重點語法 * * * * *

→ Instantiate實例化(要生成的物件, 物件位置, 物件旋轉值);

e.g. Instantiate (gameObject, transform.position, transform.rotation);

★ 補充 :

*   自訂Position : new Vector3(0,0,0)

*   自訂Rotation : new Quaternion(0,0,0,0)

e.g. Instantiate (gameObject, new Vector3(0,0,0), new Quaternion(0,0,0,0));

   ● 生成物件在某物件的位置 文章傳送門 : https://goo.gl/XBhBcU

 

  隨機整數 int,不包含最大值。

Random.Rangeint 最小值,int 最大值);

隨機產生一個整數,範圍 :   最小值 ~ 最大值(不包含)

e.g. Random.Range(0, 3);  // 0 ~ 2 

  ● 隨機值文章傳送門 : https://goo.gl/wxhL5b

 

  陣列宣告  不指定陣列長度(陣列大小)

 陣列宣告方法 : 宣告的類型後面加上[]。

e.g. public GameObject[] Objs;

● 陣列文章傳送門 : https://goo.gl/ynyZF4

 

提醒!!

物件有調整過旋轉值Rotation,記得要用一個GameObject來當做父物件,此父物件旋轉值都為   0

若沒有這樣做 -> 生成出來的物件方向會跟您想要的不同哦~

生成物件注意事項.jpg

 

  • 此篇效果 隨機地點生成隨機物件  * * * * 

 

 

-  大概了解重點後,接下來進入完整教學   -

 

一、準備好要生成的物件,此篇以三個物件當作範例。

準備要生成的物件.jpg

 

二、新增一個C#,用來控制生成物件幾秒後要刪除物件,並將此程式拖曳到要生成的物件上。

刪除物件程式碼.jpg

 

三、來看看刪除的完整程式碼,在這裡我們設定1秒後刪除物件。

刪除物件程式碼_02.jpg

public class Destroy : MonoBehaviour {

void Start () {

Destroy(gameObject, 1);

//銷毀(要銷毀的物件,幾秒後銷毀);

}

}

   

四、將要生成的物件,拖曳至 Assets/Prefabs 資料夾,就可以建立物件的   Prefab 預製物了(物件名稱會變成藍色)

* Prefab 預製物 : 預先製作好的物件,在需要時再把該物件載入到場景中,或者也可以直接拖曳到場景中使用。

* 將物件拖曳到   Assets 即可建立預製物,為了方便管理,統一將預製物放在   Assets/Prefabs 資料夾哦 ~

將物件變成預製物.jpg

 

提醒!!

物件有調整過旋轉值Rotation,記得要用一個GameObject來當做父物件,且此父物件旋轉值都為   0

若沒有這樣做 -> 生成出來的物件方向會跟您想要的不同哦~

生成物件注意事項.jpg

 

五、因為已經將需要生成的物件變成   Prefab 預製物了,所以可以將場景上的物件刪除。

刪除場上物件.jpg

 

六、建立生成點,可以在   Hierarchy右鍵 -> Create Empty

此範例增加了   3個生成點,然後把生成點放在您想要的位置。

新增空物件.jpg

建立生成點.jpg

 

七、新增一個   C#,用來控制生成物件,並拖曳到   Hierarchy的某物件上。

程式碼拖曳到Hierarchy的某物件上.jpg

 

八、先看看生成的完整程式碼 (下一點有程式碼解析 ! )

生成程式碼.jpg

檔案名稱與public class的名稱記得要一樣!!! (不然會出現錯誤!)

 

public GameObject[] Objects;

public Transform[] Points;

public float Ins_Time = 1;

 

void Start ()

{

      InvokeRepeating("Ins_Objs", Ins_Time, Ins_Time);

}

 

void Ins_Objs() //生成物件函式。

{

int Random_Objects = Random.Range(0, Objects.Length);

int Random_Points = Random.Range(0, Points.Length);

Instantiate(Objects[Random_Objects], Points[Random_Points].transform.position, Points [Random_Points].transform.rotation);

}

 

九、生成程式碼解析

生成程式碼_02.jpg

public GameObject[] Objects; //裝生成物件的陣列。

public Transform[] Points; //裝生成點的陣列。

public float Ins_Time = 1; //每幾秒生成一次。

//public 公開 –

在宣告前面加上public,程式碼底下會出現欄位,可以從外部放入指定的物件(要與宣告類型相同哦!)

 

void Start ()

{

InvokeRepeating("Ins_Objs", Ins_Time, Ins_Time);

//重複呼叫(“函式名,第一次間隔幾秒呼叫,每幾秒呼叫一次)

}

 

void Ins_Objs() //生成物件函式。

{

int Random_Objects = Random.Range(0, Objects.Length);

//隨機產生0~物件陣列長度的整數-1(不包含最大值所以-1)

 

int Random_Points = Random.Range(0, Points.Length);

//隨機產生0~生成點陣列長度的整數-1(不包含最大值所以-1)

 

Instantiate(Objects[Random_Objects], Points[Random_Points].transform.position, Points [Random_Points].transform.rotation);

//Instantiate實例化(要生成的物件, 物件位置, 物件旋轉值);

}

 

十、設定各陣列的長度,並放入物件。

Objects : 放入要生成的物件。

Points : 放入生成點位置。

設定陣列長度.jpg

 

十一、大功告成囉   !!!

 

-------------------------------------------------------------------------------------------------------------------------------------

 

我們有粉絲專頁囉!!!       

如果怕有問題連絡不到我們,歡迎隨時私訊FB粉專哦!!!

https://www.facebook.com/Straying2018/

 

●     如果這篇文章有幫助到您,希望您能留言給予我們鼓勵 !  

●     對於文章有任何的建議,非常歡迎留言告訴我們哦 !!!  

●     有任何想知道的功能也歡迎告訴我們,我們會盡快寫成部落格分享給大家!

 

- By Cindy -  

arrow
arrow

    『迷途』 發表在 痞客邦 留言(1) 人氣()