使用圖塊地圖

前言

Gridmaps 是一種用於建立3D遊戲關卡的工具, 方式類似於2D中使用 TileMap . 使用一個定義好的可以放在一個網格中的 3D mesh (a MeshLibrary) (譯注,grid和mesh都譯作網格, 這裡為了清晰,mesh直接使用英文,grid則譯作網格)物件集合搭建關卡, 就像您使用無限多數量的樂高積木搭建世界一樣.

就像使用tilemap的tile一樣, 碰撞和導覽也可以新增到網格中.

範例專案

除了這份說明文件,你可能也會想看看 Godot Demo 專案

解壓此專案後,使用「Import」按鈕將其加入專案管理器。若跳出提示需要轉換到較新的 Godot 版本,請點擊 Convert project.godot

建立 MeshLibrary

首先,您需要一個 MeshLibrary,它是可以在網格地圖中使用的 Mesh 的集合。打開“MeshLibrary_Source.tscn”場景以查看如何設定網格庫的範例。

../../_images/gridmap_meshlibrary1.webp

可以看到, 這個場景有一個 Node3D 節點作為它的根, 以及一些 MeshInstance3D 子節點.

如果您的場景中不需要任何物理, 那麼到這裡就完成了. 但是, 在大多數情況下, 您還需要給網格指定碰撞體.

碰撞

您可以手動為每個 Mesh 指定 StaticBody3DCollisionShape3D 。或者,您可以使用“網格”功能表根據 "Mesh" 資料自動建立碰撞體。

../../_images/gridmap_create_body.webp

請注意,“凸”(Convex)碰撞體對於簡單 Mesh 效果更好。對於更複雜的形狀,請選擇“建立三角網格靜態體”。一旦每個網格都分配了物理主體和碰撞形狀,就可以使用網格庫了。

../../_images/gridmap_mesh_scene.webp

材質

在生成網格庫時, 只使用網格內的材質. 節點上設定的材質將被忽略.

光照貼圖

可以在 GridMap 上烘焙光照貼圖。若網格已具備 UV2,將會直接重用;若沒有,烘焙時會自動以 0.1 單位的光照 texel 尺寸產生。若需其他 texel 尺寸,可在匯入面板將全域光照模式設為 Static Lightmaps 並在該處指定 texel 大小。此選項必須在場景轉為 MeshLibrary 之前 更改,之後修改將不會影響既有的 MeshLibrary 資料。

除上述特點外,其餘光照貼圖的烘焙流程與一般 3D 場景相同。更多資訊請參閱 使用光照貼圖全域光照

MeshLibrary 格式

總結 MeshLibrary 格式的特定限制:一個 MeshLibrary 場景必須以 Node3D 為根節點,並包含多個作為 MeshLibrary 項目的子節點。每個根節點的子節點須:

  • 必須是 MeshInstance3D,並成為 MeshLibrary 項目。只有這個可見的 Mesh 會被匯出。

  • 材質必須設在 mesh 的材質插槽中, 不能 設在 MeshInstance3D 的材質插槽。

  • 最多只能有一個 StaticBody3D 子節點做為碰撞用途。該 StaticBody3D 須包含一個或多個 CollisionShape3D 子節點。

  • 最多只能有一個 NavigationRegion3D 子節點作為導覽用途。該 NavigationRegion3D 可包含一個或多個額外的 MeshInstance3D 子節點,這些可用於烘焙導覽網格,但不會被匯出為可見 Mesh。

僅支援此特定格式。其他類型的子節點不會被識別與匯出。GridMap 並非用來在網格上擺放 節點 的通用系統,而是針對於帶有碰撞與導覽功能的 Mesh 設計的特定優化系統。

匯出 MeshLibrary

要匯出庫,點擊場景 -> 轉換為.. -> 網格庫...,並將其保存為資源。

../../_images/gridmap_export.webp

你可以在專案中找到已匯出的 MeshLibrary,檔名為 MeshLibrary.tres

使用 GridMap

建立新場景並新增一個 GridMap 節點。將檔案系統面板中的資源檔拖放到屬性檢視器的 Mesh Library 屬性以加入網格庫。

../../_images/gridmap_mesh_library_inspector.webp

屬性檢視器屬性

Physics Material 設定可覆寫 NavigationMesh 中每個網格所使用的物理材質。

Cells 區段中,Size 應設為你的網格尺寸。本示例可維持預設值。請取消勾選 Center Y 屬性。

Collision 選項可為整個格子設定碰撞層、碰撞遮罩與優先度。其運作方式請參閱 物理

Navigation 底下有「Bake Navigation」選項。啟用後,對於使用了具備導覽網格之網格庫項目的每個格子,會建立對應的導覽區域。

在屬性檢視器中點選 MeshLibrary 本身,可調整各個網格的設定,例如其導覽網格、導覽圖層,或該網格是否投射陰影。

../../_images/gridmap_mesh_library_settings.webp

GridMap 面板

編輯器底部是 GridMap 面板,新增 GridMap 節點時應會自動開啟。

../../_images/gridmap_panel.webp

工具列由左至右功能如下:

  • Transform:在場景中加入操作器,讓你能調整 GridMap 在場景中的相對位置與旋轉。

  • Selection:啟用時可在檢視區框選區域,點擊並拖曳即可一次選取多個格子。

  • Erase:啟用時,在檢視區點擊即可刪除網格物件。

  • Paint:啟用時,在檢視區點擊即可將 GridMap 面板中目前選取的網格加入場景。

  • Pick:啟用時,在檢視區點擊 GridMap 的網格物件,會在 GridMap 面板中選取對應的項目。

  • Fill:以 GridMap 底部面板中選取的網格,填滿檢視區中已選取的區域。

  • Move:移動檢視區中目前選取的網格物件。

  • Duplicate:複製 GridMap 中所選取的網格物件。

  • Delete:類似 Erase,但會作用於整個已選取的區域。

  • Cursor Rotate X:當 Paint 工具啟用時,旋轉將要繪製的網格於 X 軸方向。若正在移動選取區域,也會一併旋轉。

  • Cursor Rotate Y:當 Paint 工具啟用時,旋轉將要繪製的網格於 Y 軸方向。若正在移動選取區域,也會一併旋轉。

  • Cursor Rotate Z:當 Paint 工具啟用時,旋轉將要繪製的網格於 Z 軸方向。若正在移動選取區域,也會一併旋轉。

  • Change Grid Floor:調整目前操作的樓層,可用箭頭按鈕或鍵入數值更改

  • Filter Meshes:用於在底部面板搜尋特定網格。

  • Zoom:控制底部面板中網格的縮放檢視。

  • Layout toggles:這兩個按鈕可在底部面板的不同網格排列方式間切換。

  • Tools dropdown:開啟包含更多選項的下拉選單。

../../_images/gridmap_dropdown.webp

在該下拉選單中點擊 Settings 會開啟視窗,讓你調整 Pick Distance,即相對相機位置(以公尺計)在 GridMap 上可放置方塊的最大距離。

在程式碼中使用 GridMap

有關節點方法和成員變數的詳細資訊, 請參閱 GridMap.