場景與節點

簡介

../../_images/chef.png

稍微想像一下自己不再是遊戲開發者,而成為一名廚師了!把時髦的穿著換成廚師帽跟雙釦夾克。現在,不做遊戲了,來為客人們設計一道全新的美味料理食譜。

那麼,廚師是怎麼想出食譜的呢?食譜可以分成兩個部分:首先是材料,再來是說明如何處理食材。這樣一來,人人都能照著食譜來做出這道卓越的料理。

在 Godot 裡製作遊戲也很像做菜。使用 Godot 就像在廚房裡一樣。而這個廚房裡, 節點 就像是一台冰箱,裝滿了新鮮食材準備好要進行料理。

節點有很多種,有的節點顯示圖片,有的節點播放聲音,還有的節點顯示 3D 模型,總共還有幾十種的節點。

節點

但,讓我們先從基本的開始。節點就是用來創作遊戲的基本元素。就像剛才提到的,節點可以展現各種各樣特定的功能。然而,任何一個節點都有下列屬性:

  • 節點有名稱。

  • 節點有可編輯的屬性。

  • 節點能接收用來處理每一幀的回呼。

  • 可以擴充節點(讓節點有更多功能)。

  • 可以新增節點到另一個節點,變成另一個節點的子節點。

../../_images/tree.png

最後一點很重要:節點可以有其他節點作為子節點。用這種方式編排的時候,節點就變成了 樹狀 的。

在 Godot 中以樹狀形式編排節點就是組織專案的強力道具。因為不同的節點有不同的功能,將這些節點組合起來就能創造出更複雜的功能。

如果你還不懂,別擔心,接下來幾個章節我們會繼續深入瞭解。只要記得最重要的是:有個東西叫節點,然後能用樹狀形式排列這些節點。

場景

../../_images/scene_tree_example.png

現在我們已經知道節點的概念了,那麼下一個該說明的就是場景了。

場景是有一組由一組節點所組成的,這些節點以樹狀結構排列。然後,場景還…:

  • 場景永遠都有一個根節點。

  • 場景可以保存在硬碟上,之後可以再讀取進來。

  • 場景可以被 實體化 (稍後會再說明)。

執行遊戲,就是執行場景。一個專案可以有多個場景,但要開始遊戲則必須要先把其中一個場景設為主場景。

基本上來說,Godot 編輯器就是一個 場景編輯器,有著各種能夠編輯 2D 與 3D 場景以及使用者介面的工具。但編輯器基本上就只是用來編輯場景以及編輯構成場景的節點。

編輯器

打開在 Godot 編輯器簡介 建立的專案或是建立一個新專案。這樣一來就會打開 Godot 編輯器:

../../_images/empty_editor.png

就像剛才說的,在 Godot 製作遊戲就像在廚房裡一樣。讓我們打開冰箱往專案裡加一點新鮮的節點吧!我們先從在螢幕上顯示「Hellow World」開始。

我們需要 Label (標籤) 節點。點擊場景 Dock 左上角的 [新增子節點] 按鈕 (加號圖示)。這個按鈕是往場景裡新增節點的主要方法,這個按鈕會把選擇的節點新增成目前節點的子節點,在空白的場景中則會新增為「根」節點。

備註

在空白的場景中 (也就是沒有根節點的場景),場景 Dock 會顯示好幾個選項,用來快速新增根節點到場景中。[2D 場景] 可以新增 Node2D 節點,[3D 場景] 可以新增 Spatial 節點,[使用者介面] 會新增 Control 節點,[自定節點] 可以選擇任何一種節點 (就跟點擊「新增子節點」的效果一樣)。也可以點擊星形的圖示來顯示或關閉我的最愛裡的節點。

這些預設選項只是為了方便而存在的,並非各類場景強制要求的:並不是所有 3D 場景都需要以 Spatial 作為根節點。同樣地,並不是所有圖形界面或 2D 節點都需要以 Control 或 Node2D 作為根節點。

現在,我們可以點擊 [自定節點] 按鈕或畫面上方的 [新增節點] 按鈕來新增 Label 節點。如果場景不是空白的話,就得用新增節點按鈕來新增子節點。

../../_images/newnode_button.png

如此一來會打開新增節點對話框,會顯示一串長長的列表,包含了所有可以建立的節點:

../../_images/node_classes.png

這裡我們先選擇「Label」節點。最快的方法大概就是直接用搜尋的:

../../_images/node_search_label.png

最後,建立 Label!當按下 [建立] 按鈕的時候會發生許多事情:

../../_images/editor_with_label.png

首先,場景變成了 2D 編輯器 (因為 Label 是 2D 節點型別),然後 Label 以選中的狀態出現在畫面檢視區的左上角。

節點會顯示在場景 Dock 中的場景樹編輯器中,Label 的屬性會顯示在屬性面板 Dock 裡。

下一步我們要修改標籤的「Text (文字)」屬性。來把它改成「Hello World」:

../../_images/hw.png

好了,現在可以執行場景了!點擊上方工具列的 播放場景 按鈕 (或是按 F6):

../../_images/playscene.png

然後…… 哎呀。

../../_images/neversaved.png

場景必須先保存才能執行,所以先到 [場景] -> [保存] 把場景保存成 Hello.tscn 之類的檔案:

../../_images/save_scene.png

這裡就是有趣的部分了。檔案對話框是一種特別的對話框,只能把東西保存在專案裡面。專案的根目錄是 res://,代表「資源路徑 (Resource Path)」。這表示檔案只能被保存在專案裡面。當以後要在 Godot 裡進行檔案操作的時候,請記得 res:// 就代表資源路徑,而不需要管平台或安裝的位置,這也是在遊戲裡找到資源檔案的方法。

保存場景後再點擊一次執行場景,「Hello World」範例應該終於執行了:

../../_images/helloworld.png

成功!

備註

如果沒有馬上運作,而且至少有一部 hiDPI 顯示器時,請前往 [專案] → [專案設定] → [Display] → [Window] 然後啟用 Dpi 底下的 Allow Hidpi

設定專案

好了,該來設定專案了。目前,要執行某樣東西的唯一方法就是執行場景。然而,專案可能有很多個場景,所以我們必須先將其中一個場景設為主場景。這個場景會在每次執行專案的時候載入。

這些設定都會保存於 project.godot 檔案中,該檔案為 win.ini 格式的純文字檔 (才能輕鬆編輯他)。這裡面有很多設定可以修改,可以用來改變專案執行的方式。為了簡化編輯 project.godot 的流程,Godot 提供了一個專案設定對話框,就是編輯 project.godot 檔案的前端。

選擇 [專案] -> [專案設定] 來打開這個對話框。現在就試試吧。

視窗打開以後,先來選擇主場景。到 Application/Run/Main Scene 屬性,然後點擊並選擇「Hello.tscn」。

../../_images/main_scene.png

改了設定之後,只要按下平常使用的執行按鈕 (或是 F5),不論現在正在編輯哪個場景,都會執行剛才設定的主場景。

專案設定對話框提供了許多可以被保存為 project.godot 的選項,對話框裡面也會顯示預設值。如果你更改了其中一個數值的話,名稱左邊會有一個勾勾,表示選項會被保存到 project.godot 並被記住。

另外,也可以新增自定組態設定選項,然後在執行的時候使用 ProjectSettings 單例讀取出來。

下回待續…

本教學討論了有關「場景與節點」的部分,但目前我們還只有 一個 節點與 一個 場景!別擔心,下一個章節會繼續增加的…