理解預製體和例項化



在遊戲過程中,例項化和銷燬物件非常重要。例項化簡單來說就是創造。遊戲中的物品出現或“生成”,敵人死亡,GUI 元素消失,場景不斷載入。瞭解如何正確地移除不需要的物件以及如何引入所需的物件變得更加重要。

讓我們首先了解什麼是預製體。理解預製體對於理解 Unity 中的例項化機制非常重要。

預製體就像遊戲物件的藍圖。預製體在某種程度上是遊戲物件的副本,可以被複制並放入場景中,即使在建立場景時它並不存在;換句話說,預製體可以用於動態生成遊戲物件

要建立一個預製體,你只需將所需的 GameObject 從場景層次結構拖放到專案資源中。

Prefabs Creation

現在,要例項化一個 GameObject,我們在指令碼中呼叫Instantiate() 方法。此方法在MonoBehaviour中定義,它接受一個 GameObject 作為引數,以便知道要建立/複製哪個 GameObject。它還具有各種過載方法,用於更改新例項化物件的變換以及父子關係。

讓我們嘗試在按下空格鍵時例項化一個新的六邊形

建立一個名為Instantiator的新指令碼並開啟它。在Update方法中,輸入以下程式碼。

在這裡,我們使用Input類的GetKeyDown方法來檢查玩家在上幀是否按下了特定的按鈕。由於我們希望它持續檢查,所以我們將其放入Update方法中,該方法每秒執行 60 次。如果由KeyCode列舉(列出標準鍵盤上所有可能的鍵)指定的鍵在該幀被按下,則GetKeyDown方法返回true

public class Instantiator : MonoBehaviour {
   public GameObject Hexagon;
   // Update is called once per frame
   void Update () {
      if (Input.GetKeyDown(KeyCode.Space)) {
         Instantiate(Hexagon);
      }
   }
}

頂部的公共 GameObject 宣告建立了一個類似於我們在前面課程中為 Rigidbody2D 建立的槽。但是,此槽僅接受預製體(在編輯器時間)和遊戲物件(在執行時)。

儲存指令碼並讓它編譯。完成後,透過轉到物件層次結構右鍵選單並選擇建立空物件來建立一個新的 GameObject。

Create Empty

將此物件命名為可識別的名稱,例如Instatiator 物件,並將我們新建立的指令碼附加到它。在為 GameObject 顯示的槽中,拖入我們建立的預製體。

Instatiator Object

如果我們現在運行遊戲,按下空格鍵將建立一個與我們用來建立預製體的六邊形物件相同的新六邊形物件。你可以在物件層次結構中看到每個建立的六邊形。你暫時看不到它們出現在遊戲中,是因為它們都是完全重疊建立的。

Hexagon object

在下一課中,我們將瞭解物件銷燬的概念。

廣告
© . All rights reserved.