實體化 (續)

重點

實體化有很多便利的用途。簡單來說,通過實體化就可以:

  • 細分場景,讓場景更容易管理。

  • 通過實體化來一次管理與編輯多個節點實體。

  • 通過實體化,可以在 UI 內組織與嵌入複雜的遊戲流程 (Godot 裡的 UI 元素也是節點)。

設計語言

其實,最大的優點就是能把「實體化場景」看作一個優秀的設計語言。這就是 Godot 與其他引擎的差別,Godot 就是基於這個概念所設計的。

當使用 Godot 製作遊戲的時候,我們建議你忽略大多數常見的設計模式,例如 MVC 或 ER 圖等,轉而用更自然的方式思考場景的設計。可以先從想像遊戲中的單一元素開始,不只是程式設計師能叫出名字的元素,而是任何人都喊得出名字的元素。

例如,可以這樣想像簡單的射擊遊戲:

../../_images/shooter_instancing.png

幾乎任何一種遊戲都可以用這種方式畫成圖片。先寫下遊戲裡可以被看到的部分,然後在每個部分用箭頭來表示這些元素的從屬關係。

畫出這樣的圖之後,我們建議你為圖上的各個元素都建立一個場景來使用,再通過實體化來做出從屬關係 (可以用程式碼或是直接在編輯器裡實體化)。

開發遊戲 (或是一般軟體) 時,我們總會花費許多時間來設計架構,然後再花時間把遊戲的元素都套用到這個架構上。以場景為基礎來設計就取代了這個過程,讓開發變得更快速而且更直觀,也讓你能直接專注於實現遊戲本身的邏輯。由於大多數的遊戲元件都可以直接對應到場景上,使用使用以場景實體化為基礎的設計也就能在架構上花費較少的程式碼。

再來看看另一個某方面來說更複雜的例子。這個例子是開放世界類型的遊戲,有很多素材以及巢狀的元素:

../../_images/openworld_instancing.png

先來從房間元素開始。我們可以做幾個不同的房間場景,裡面用不同的方式來排列傢俱 (傢俱也是場景)。之後我們就能做一個房子場景,然後再把房間接上去就有了內部構造了。

接著,我們可以做一個城堡場景,城堡就是由很多房子的實體所組成的。再來就可以開始處理世界地圖的地形了,然後把城堡放進去裡面。

接下來我們可以建立一些代表守衛 (以及其他 NPC) 的場景,然後也把這些場景都加進城堡裡。這樣一來,這些 NPC 就間接地進到了整個遊戲世界裡了。

在 Godot 裡,很容易就可以通過這種方式來迭代出遊戲,需要做的就只是建立場景、實體化場景然後建立更多場景再實體化更多場景。而且,不管是對於程式設計師或非程式設計師來說,Godot 的編輯器 UI 很友善。一般標準的團隊開發流程還會有 2D 與 3D 設計師、關卡設計師、遊戲設計師以及動畫家的參與,大家都會使用 Godot 編輯器界面來進行作業。

資訊爆炸!

顯然同時塞了很多高級的資訊給你。然而,這個教學最重要的部分就是要讓你大概瞭解在真實的專案內是如何使用場景與實體化的。

一旦開始製作遊戲並開始實踐這裡討論到的概念,很快就會習慣了。現在,不要想太多,直接進到下一個教學吧!