close
Unity 動態載入物件方法有:
該函數會將物件複製一份出來到場景中,並且預設為 UnityEngine.Object 的類型。
Instantiate( 要複製的物件 );
該函數會將物件複製一份出來到場景中,並且會將物件轉成指定的類型。
PS:該功能 Unity 5 以上才有。
Instantiate< 指定的類型 >( 要複製的物件 );
若是你的類別沒有繼承 MonoBehaviour 的話,是找不到 Instantiate 該方法的。
這時候你可以使用以下函數,意思是一樣的。
GameObject.Instantiate( 要複製的物件 );
GameObject.Instantiate< 指定的類型 >( 要複製的物件 );
PS:在 Unity 中,其實是把複製的動作稱作為 "克隆(Clone)"。
以下為使用示範:
該講解中,是直接使用 "GameObject 與 Prefab 的區別與建立" 的範例檔來做示範的,若有需要可直接前往下載。
步驟一:
我們建立一個腳本,命名隨意,這邊我命名為 "Create"。
步驟二:
打開剛剛建立的腳本,修改如下。
using UnityEngine; public class Create : MonoBehaviour { // 這是用來複製的 GameObject 物件, // 該變數必須是 public, 這樣才有辦法從外面把物件拖曳近來. public GameObject gobj; // 這裡會在持續檢查是否有按下鍵盤的 "A" 按鍵, // 若有按下 "A" 按鍵的話則複製物件到場景上. private void Update() { // 將 gobj 存放的物件複製一份到場景上 if ( Input.GetKeyDown(KeyCode.A) ) { Instantiate( this.gobj ); } } }
步驟三:
將腳本儲存後,拖曳至場景上任一物件上,這邊我拖曳到 "Main Camera" 身上。
步驟四:
將要複製的物件拖曳至腳本上的變數裡。
基本上不一定要拖曳 Prefab 物件,其實場景上的 GameObject 也可以拖曳至腳本裡面,但若是沒特別用途的話,不建議這樣做。
步驟四:
可以啟動開始測試囉!
步驟五:
按下鍵盤中的 A,你就會發現物件被複製到場景上囉!
大家可以看到有很多 "Cube (Clone)" 名稱的 GameObject,這是複製出來的物件,Unity 會自動把複製出來的物件加上 "(Clone)" 這名稱在後面。
步驟六:
若你想要取得並修改複製出來的 GameObject,你可以建一個 GameObject 去接收回傳值,不過記得要轉型,因為它是預設 Object 類型。
// 將 gobj 存放的物件複製一份到場景上 // 並且修改物件名稱 if ( Input.GetKeyDown(KeyCode.S) ) { GameObject gobj = Instantiate( this.gobj ) as GameObject; // 修改名稱為 MyCube gobj.name = "MyCube"; // 以下方法為 Unity 5 以上才有的功能 // GameObject gobj = Instantiate< GameObject >( this.gobj ); }
步驟七:
執行後按下 A、S 的結果。

該教學的一系列文章:
文章標籤
全站熱搜