Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

使用圖塊地圖

前言

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: Adjusts what floor is currently being worked on. Can be changed with the arrows, typing a value in the field, or Ctrl + Mouse wheel.

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

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

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

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

../../_images/gridmap_dropdown.webp

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

在程式碼中使用 GridMap

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