Unity 動態載入物件方法有:
 
該函數會將物件複製一份出來到場景中,並且預設為 UnityEngine.Object 的類型。
Instantiate( 要複製的物件 );
 
該函數會將物件複製一份出來到場景中,並且會將物件轉成指定的類型。
PS:該功能 Unity 5 以上才有。
Instantiate< 指定的類型 >( 要複製的物件 );
 
若是你的類別沒有繼承 MonoBehaviour 的話,是找不到 Instantiate 該方法的。
這時候你可以使用以下函數,意思是一樣的。
GameObject.Instantiate( 要複製的物件 );
GameObject.Instantiate< 指定的類型 >( 要複製的物件 );
 
PS:在 Unity 中,其實是把複製的動作稱作為 "克隆(Clone)"。
 
 
以下為使用示範:
 
該講解中,是直接使用 "GameObject 與 Prefab 的區別與建立" 的範例檔來做示範的,若有需要可直接前往下載。
 
 
步驟一:
我們建立一個腳本,命名隨意,這邊我命名為 "Create"。

image01.jpg

 
 
步驟二:
打開剛剛建立的腳本,修改如下。
 
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" 身上。

image02.jpg

 
 
步驟四:
將要複製的物件拖曳至腳本上的變數裡。

image03.jpg

基本上不一定要拖曳 Prefab 物件,其實場景上的 GameObject 也可以拖曳至腳本裡面,但若是沒特別用途的話,不建議這樣做。
 
 
步驟四:
可以啟動開始測試囉!

image04.jpg

 
 
步驟五:
按下鍵盤中的 A,你就會發現物件被複製到場景上囉!

image05.jpg

大家可以看到有很多 "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 的結果。
image06.jpg
 
 
 
該教學的一系列文章:
 
arrow
arrow
    文章標籤
    C# Unity
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()