使用 Instantiate() 函數生成物件
在Unity中,Instantiate() 函數是用來生成新的遊戲物件的。這個方法通常用於動態創建物件,例如敵人、道具、特效或其他在遊戲運行期間需要生成的內容。
1. Instantiate() 函數的基本用法
Instantiate() 函數可以用來複製現有的物件或預製物(Prefab)。你可以指定生成物件的位置、旋轉角度以及其父物件。
語法
1
2
Object Instantiate(Object original, Vector3 position, Quaternion rotation);
Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
original:要複製的物件或預製物(Prefab)。position:生成物件的位置(Vector3)。rotation:生成物件的旋轉(Quaternion)。parent(可選):指定生成物件的父物件。
2. 創建一個簡單的生成腳本
以下是一個簡單的腳本示例,展示如何使用 Instantiate() 函數動態生成物件。
步驟
- 創建一個預製物(Prefab):
- 在 
Hierarchy中創建一個 3D 物件,例如Cube。 - 調整物件的屬性(例如顏色、材質、大小等)。
 - 將該物件從 
Hierarchy拖放到Assets資料夾中,創建一個預製物(Prefab)。 
 - 在 
 - 創建一個生成腳本:
- 在 
Assets資料夾中,右鍵單擊並選擇Create > C# Script,將其命名為ObjectSpawner。 - 打開腳本並編寫以下代碼:
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
using UnityEngine; public class ObjectSpawner : MonoBehaviour { public GameObject prefab; // 參考要生成的預製物 public Transform spawnPoint; // 生成的位置 void Update() { // 當玩家按下空格鍵時生成物件 if (Input.GetKeyDown(KeyCode.Space)) { Instantiate(prefab, spawnPoint.position, spawnPoint.rotation); } } }
 - 在 
 - 將腳本掛載到遊戲物件上:
- 將 
ObjectSpawner腳本掛載到任意遊戲物件(例如Empty Object)上。 - 在 
Inspector視圖中,將你的預製物拖放到prefab欄位,並設置spawnPoint(可以使用主攝影機的位置或其他遊戲物件的位置)。 
 - 將 
 - 測試物件生成:
- 點擊 
Play,按下空格鍵,你將看到新的遊戲物件在指定位置生成。 
 - 點擊 
 
3. 進一步的用法:設置父物件
你可以指定生成物件的父物件,使新生成的物件成為該父物件的子物件。
修改腳本以設置父物件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;
public class ObjectSpawnerWithParent : MonoBehaviour
{
    public GameObject prefab; // 參考要生成的預製物
    public Transform spawnPoint; // 生成的位置
    public Transform parentObject; // 父物件
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GameObject newObject = Instantiate(prefab, spawnPoint.position, spawnPoint.rotation, parentObject);
            // 將新生成的物件設置為指定父物件的子物件
        }
    }
}
測試設置父物件:
- 將腳本掛載到場景中的任意物件。
 - 在 
Inspector視圖中,將parentObject設置為你想要的新物件的父物件(例如,場景中的另一個物件)。 
4. 動態生成和自動刪除
你還可以動態生成物件並設置其自動刪除。例如,生成一個爆炸效果或臨時物件,並在幾秒鐘後自動刪除。
範例:自動刪除生成的物件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;
public class TimedObjectSpawner : MonoBehaviour
{
    public GameObject prefab; // 參考要生成的預製物
    public Transform spawnPoint; // 生成的位置
    public float destroyDelay = 5f; // 刪除延遲時間
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GameObject newObject = Instantiate(prefab, spawnPoint.position, spawnPoint.rotation);
            Destroy(newObject, destroyDelay); // 在指定時間後自動刪除生成的物件
        }
    }
}
測試自動刪除物件:
- 按下 
空格鍵,新物件生成後,經過指定時間(例如5秒)將自動刪除。 
5. 小結
Instantiate()函數 允許你動態生成遊戲物件,並能夠指定其位置、旋轉和父物件。- 可以結合 
Destroy()函數 來自動刪除生成的物件,以實現動態效果。 - 掌握這些方法後,你可以靈活控制遊戲中的各種物件生成邏輯,為遊戲添加更多動態和互動的內容。
 
 本文章以  CC BY 4.0  授權