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.Range(int 最小值,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度。
若沒有這樣做 -> 生成出來的物件方向會跟您想要的不同哦~
- 此篇效果 – 隨機地點生成隨機物件 * * * *
- 大概了解重點後,接下來進入完整教學 -
一、準備好要生成的物件,此篇以三個物件當作範例。
二、新增一個C#,用來控制生成物件幾秒後要刪除物件,並將此程式拖曳到要生成的物件上。
三、來看看刪除的完整程式碼,在這裡我們設定1秒後刪除物件。
public class Destroy : MonoBehaviour {
void Start () {
Destroy(gameObject, 1);
//銷毀(要銷毀的物件,幾秒後銷毀);
}
}
四、將要生成的物件,拖曳至 Assets/Prefabs 資料夾,就可以建立物件的 Prefab 預製物了(物件名稱會變成藍色)。
* Prefab 預製物 : 預先製作好的物件,在需要時再把該物件載入到場景中,或者也可以直接拖曳到場景中使用。
* 將物件拖曳到 Assets 即可建立預製物,為了方便管理,統一將預製物放在 Assets/Prefabs 資料夾哦 ~
★提醒!!
若物件有調整過旋轉值Rotation,記得要用一個GameObject來當做父物件,且此父物件旋轉值都為 0度。
若沒有這樣做 -> 生成出來的物件方向會跟您想要的不同哦~
五、因為已經將需要生成的物件變成 Prefab 預製物了,所以可以將場景上的物件刪除。
六、建立生成點,可以在 Hierarchy右鍵 -> Create Empty。
此範例增加了 3個生成點,然後把生成點放在您想要的位置。
七、新增一個 C#,用來控制生成物件,並拖曳到 Hierarchy的某物件上。
八、先看看生成的完整程式碼 (下一點有程式碼解析 ! )
檔案名稱與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);
}
九、生成程式碼解析
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 : 放入生成點位置。
十一、大功告成囉 !!!
-------------------------------------------------------------------------------------------------------------------------------------
我們有粉絲專頁囉!!!
如果怕有問題連絡不到我們,歡迎隨時私訊FB粉專哦!!!
https://www.facebook.com/Straying2018/
● 如果這篇文章有幫助到您,希望您能留言給予我們鼓勵 !
● 對於文章有任何的建議,非常歡迎留言告訴我們哦 !!!
● 有任何想知道的功能也歡迎告訴我們,我們會盡快寫成部落格分享給大家!
- By Cindy -
留言列表