Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

設定遊戲區域

在第一部分中,我們將設定遊戲區域。讓我們從匯入初始素材、設定遊戲場景入手。

我們準備了一些遊戲素材,以便我們可以直接跳到程式碼。你可以在這裡下載它們: Squash the Creeps assets

一旦下在完成,解壓縮到任意處,然後打開 Godot 並在專案管理員裡點擊 [匯入] 按鈕來新增該專案。

../../_images/01.import_button.webp

請在匯入彈出框中輸入剛才新建的目錄 squash_the_creeps_start/ 的完整路徑。你也可以點擊右側的*瀏覽*按鈕,打開檔瀏覽器並找到該資料夾所包含的 project.godot 檔案。

../../_images/02.browse_to_project_folder.png

點擊*匯入並編輯*在編輯器中打開該專案。

../../_images/03.import_and_edit.png

起始專案中包含一個圖示和兩個資料夾:art/fonts/。你可以在裡面找到遊戲中我們會用到的藝術素材和音樂。

../../_images/04.start_assets.png

裡面有兩個 3D 模型,player.glbmob.glb,一些模型使用的材質,以及一首音樂。

設定建置系統

我們將以普通的 Node 作為其根建立主場景。在*場景*面板中,按一下左上角由“+”圖示表示的*新增子節點*按鈕,然後按兩下 Node。將節點命名為 Main。另一種重命名節點的方法是在*節點*上按一下右鍵,然後選擇*重命名*(或者按 F2)。另一種將節點新增到場景中的方法是按 Ctrl + a (macOS 上則是按 Cmd + a)。

../../_images/05.main_node.png

接著保存場景。選擇 [場景] -> [保存],或是在 Windows/Linux 上按鍵盤 Ctrl + S ,在 macOS 上則是 Cmd + S

我們先新增一個地板,以防止角色掉落。要建立地板、牆壁或天花板等靜態碰撞器,可以使用 StaticBody3D 節點。它們需要 CollisionShape3D 子節點來定義碰撞區域。選擇 Main 節點後,新增 StaticBody3D 節點,然後新增 CollisionShape3D。將 StaticBody3D 重命名為 Ground

../../_images/adding_static_body3D.webp

現在場景看起來會這樣:

../../_images/06.staticbody_node.png

CollisionShape3D 旁邊會出現一個警告旗標,因為我們還沒有定義它的形狀。如果你點擊這個圖示,就會彈出一個視窗,為你提供更多資訊。

../../_images/07.collision_shape_warning.png

要建立形狀,請選中 CollisionShape3D,轉到*屬性面板*,然後按一下 Shape*(形狀)屬性旁邊的 *<空> 欄位。建立一個新的 BoxShape3D

../../_images/08.create_box_shape3D.jpg

盒子形狀非常適合平坦的地面和牆壁。它的厚度使它能夠可靠地阻擋甚至快速移動的物體。

盒子的線框會在視口中出現三個橙色的小點。你可以點擊並拖動這些點來互動地編輯形狀的範圍。我們也可以在屬性面板中精確設定尺寸。點擊 BoxShape3D 來展開資源。將它的 Size 設定為 X 軸上的 60,Y 軸的 2 和 Z 軸上的 60

../../_images/09.box_size.webp

碰撞形狀是不可見的。我們需要新增一個與之配套的視覺層。選擇 Ground 節點並新增一個 MeshInstance3D 作為其子節點。

../../_images/10.mesh_instance3d.png

在*屬性面板*中,點擊 Mesh 旁邊的欄位,建立一個 BoxMesh 資源,建立一個可見的立方體。

../../_images/11.box_mesh.webp

再次設定大小,對於預設值來說它有點太小了。點擊立方體圖示展開資源,並將其 Size 設定為 60260。由於立方體資源使用的是大小(size)而不是範圍(extents),我們需要使用這些值,以便它與我們的碰撞形狀相配對。

../../_images/12.cube_resized.png

您應該會在視口中看到一個覆蓋網格以及藍色和紅色軸的寬灰色平板。

我們要把地面往下移一點,這樣才能看到地板網格。選中 Ground 節點,按住 Ctrl`鍵啟用網格吸附(macOS 上則是 :kbd:`Cmd),然後按一下並在 Y 軸上向下拖動。也就是移動小工具裡的綠色箭頭。

../../_images/move_gizmo_y_axis.webp

備註

如果你沒有看到如上圖所示的 3D 物件操作器,請確保已啟動視圖上方工具列中的*選擇模式*。

../../_images/14.select_mode_icon.png

為了有一個可見的編輯器柵格,可以將地面往下移動 1 米。視口左下角的標籤會顯示你將該節點平移了多遠。

../../_images/15.translation_amount.png

備註

子節點會跟隨 Ground 節點一起往下移動。請確保你移動的是 Ground 節點,而不是 MeshInstance3DCollisionShape3D

最終,Ground 的 transform.position.y 應當是 -1

../../_images/ground_down1meter.webp

現在來新增一個平行光,從而讓我們的整個場景不全都是灰色的。選擇 Main 節點,然後新增一個子節點 DirectionalLight3D

../../_images/create_directional_light3d.webp

我們需要移動並旋轉 DirectionalLight3D 節點。通過按一下並拖動操縱器的綠色箭頭將其向上移動,然後按一下並拖動紅色弧線以圍繞 X 軸旋轉它,直到地面被照亮。

在*屬性面板*中,勾選核取方塊打開*Shadow -> Enabled*。

../../_images/16.turn_on_shadows.webp

腳本最終看起來應該長這樣:

../../_images/17.project_with_light.webp

這就是我們的起點了。在下一部分中,我們將處理玩家場景與基礎移動。