Instantiate 函式為物件實例化的方法,白話一點就是在遊戲場景中生成物件,當你需要在遊戲中生成原本不存在的物件時,就可以呼叫這個方法來達成。
Instantiate可以生成場景中不存在的物件,而該物件通常我們會將它做成預製物件 (Prefeb),當然我們也能夠生成場景中已經存在的物件,做一個複製的動作,它的屬性預設會和母體一樣,除非有去做屬性值的更動。
Instantiate 支援多載,以下來看看它的定義:
● 定義:
  1. public static Object Instantiate(Object original);
參數說明:● original:要生成的物件,可以是場景中的物件,也可以是 Prefeb 物件。  生成的位置在於 original 物件的值。
參數說明:● original:要生成的物件,可以是場景中的物件,也可以是 Prefeb 物件。● parent:指定的父物件,original 的位置、旋轉和大小受 parent 物件影響。  original 物件預設會在 parent 的相對位置 (0,0,0) 上。
參數說明:● original:要生成的物件,可以是場景中的物件,也可以是 Prefeb 物件。● parent:指定的父物件,original 的位置、旋轉和大小受 parent 物件影響。● instantiateInWorldSpace:布林值,生成的物件座標是要參考父物件座標或是世界座標。  true 表示參考世界座標,false 則是依循父物件座標。
參數說明:● original:要生成的物件,可以是場景中的物件,也可以是 Prefeb 物件。● position:指定生成的三維位置座標,用 new Vector3(x,y,z) 來指定。● rotation:指定生成的三維旋轉角度,用 Quaternion.Euler(x,y,z) 來指定。
參數說明:● original:要生成的物件,可以是場景中的物件,也可以是 Prefeb 物件。● position:生成的三維位置座標,是 parent 的相對位置。● rotation:生成的三維旋轉角度,是 parent 的相對角度。● parent:指定的父物件,original 的位置、旋轉和大小受 parent 物件影響。
● 用法:
//生成一個 prefebInstantiate(prefeb);
//生成子彈在槍管的位置 Instantiate(bullet,gun.trnasform);
//生成圖片在 Canvas 容器中,使用相對座標Instantiate(image,canvas.transform,false);
//生成一個 Cube 在 世界座標(10,10,10)、角度(90,0,0)Instantiate(Cube,new Vector3(10,10,10),Quaternion.Euler(90,0,0));
//生成一個 Cube 在 CubeParent 的相對座標(10,10,10)、角度(90,90,90)Instantiate(Cube,new Vector3(10,10,10),Quaternion.Euler(90,0,0),CubeParent.trnasform);
● 實做(一):射擊遊戲的子彈發射
using UnityEngine;using System.Collections;
public class Shoot: MonoBehaviour{          public GameObject gunPoint;  //槍口    public GameObject bullet;    //子彈 Prefeb        void Update()    {        if (Input.GetMouseButtonDown(0))  //偵測滑鼠左鍵被按下        {            Instantiate(bullet,gunPoint.transform);        }    }}
● 實做(二):打開背包的 UI 物件,存在螢幕中央
using UnityEngine;using System.Collections;using UnityEngine.UI;
public class OpenBag: MonoBehaviour{    
    public GameObject UIBag;  //背包 UI 物件    public Canvas canvas;  //UI 容器   
    Vector3 pos = new Vector3(Screen.Width/2,Screen.Height/2);  //螢幕正中央位置    Quaternion rot = Quaternion.Euler(0,0,0);  //旋轉角度(0,0,0)
    void Update()    {        if (Input.GetKeyDown(KeyCode.B))  //偵測鍵盤的B鍵被按下        {            Instantiate(UIBag,pos,rot,canvas.transform);        }    }}
------------------------------------------------說明--------------------------------------------------
  • 注意 parent 參數是 Transform 型態,常發生放了 GameObject 型別物件的錯誤。
  • Instantiate 物件的座標,做沒有給 parent 物件當參數,它會以世界座標軸去定位,反之若有給 parent 物件做為參數,它就會以 parent 物件的相對位置去定位,當然你也可以用布林值來指定是否參照父物件的 Transform。
  • 參考父物件的 Transform 時,也會受到生成的物件自身的 Transform 和對齊方式 (Anchors 和 Pivot) 影響到生成的位置。
生成物件之後,往往會要消除,詳情請見 Destroy 方法。

Try it and have fun!

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Evia.H 的頭像
    Evia.H

    Evia WorkStation 伊維亞工作室

    Evia.H 發表在 痞客邦 留言(0) 人氣()