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.
Checking the stable version of the documentation...
GridMap
基於 3D 圖塊地圖的節點。
說明
GridMap 允許以互動的方式將網格放置在柵格上。它在編輯器和腳本中均可使用,可幫助建立遊戲內的關卡編輯器。
GridMap 使用一個包含圖塊列表的 MeshLibrary。每個圖塊都是一個帶有材質的網格以及可選的碰撞和導覽形狀。
GridMap 包含一組儲存格。每個柵格儲存格引用 MeshLibrary 中的一個圖塊。地圖中的所有儲存格都具有相同的大小。
在內部,GridMap 會根據卦限進行拆分,形成卦限的稀疏合集,能夠進行高效的渲染和物理處理。每個卦限的大小是相同的,可以包含多個儲存格。
注意:GridMap 不是從 VisualInstance3D 擴充的,因此不能基於 VisualInstance3D.layers 隱藏或剔除遮罩。如果使燈光不影響第一層,則整個 GridMap 將不會被該燈光照亮。
教學
屬性
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
方法
訊號
cell_size_changed(cell_size: Vector3) 🔗
當 cell_size 改變時觸發。
changed() 🔗
該 TileMap 的 TileSet 發生改變時發出。
列舉
enum DebugVisibilityMode: 🔗
DebugVisibilityMode DEBUG_VISIBILITY_MODE_DEFAULT = 0
在編輯器中隱藏碰撞除錯形狀,並使用除錯設定來決定它們在遊戲內的可見性(例如 SceneTree.debug_collisions_hint 或 SceneTree.debug_navigation_hint)。
DebugVisibilityMode DEBUG_VISIBILITY_MODE_FORCE_SHOW = 1
始終顯示碰撞除錯形狀。
DebugVisibilityMode DEBUG_VISIBILITY_MODE_FORCE_HIDE = 2
始終隱藏碰撞除錯形狀。
常數
INVALID_CELL_ITEM = -1 🔗
可以在 set_cell_item() 中清除儲存格(或在 get_cell_item() 中重新代表一個空的儲存格)的無效儲存格。
屬性說明
如果為 true,則為每個使用帶有導覽網格的 mesh_library 項目的儲存格,該 GridMap 將建立一個導覽區域。建立的導覽區域將使用分配給該 MeshLibrary 專案的導覽層位元遮罩。
如果為 true,則網格項以 X 軸為中心。
如果為 true,則網格項以 Y 軸為中心。
如果為 true,則網格項以 Z 軸為中心。
每個卦限的大小,單位為儲存格的數量。適用於全部三個軸。
儲存格專案的比例。
這不會影響網格單元本身的大小,只會影響其中的專案。這可用於使儲存格專案與其鄰居重疊。
Vector3 cell_size = Vector3(2, 2, 2) 🔗
網格單元的尺寸。
這並不影響網格的尺寸大小。見 cell_scale。
這個 GridMap 所處的實體層。
GridMap 作為靜態體,意味著它們不會受到重力或是其他力的影響。它們只會受到其他與它們碰撞的物理體的影響。
此 GridMap 偵測碰撞的實體層。更多資訊請參閱文件《碰撞層與遮罩》。
float collision_priority = 1.0 🔗
發生穿透時用於解決碰撞的優先順序。優先順序越高,對物體的穿透度就越低。例如,可以用來防止玩家突破關卡的邊界。
DebugVisibilityMode collision_visibility_mode = 0 🔗
void set_collision_visibility_mode(value: DebugVisibilityMode)
DebugVisibilityMode get_collision_visibility_mode()
顯示或隱藏 GridMap 的碰撞形狀(collision shapes)。如果設定為 DEBUG_VISIBILITY_MODE_DEFAULT,則取決於“顯示碰撞除錯”(show collision debug)的全域設定。
MeshLibrary mesh_library 🔗
void set_mesh_library(value: MeshLibrary)
MeshLibrary get_mesh_library()
指定的 MeshLibrary。
PhysicsMaterial physics_material 🔗
void set_physics_material(value: PhysicsMaterial)
PhysicsMaterial get_physics_material()
覆蓋整個 GridMap 的預設摩擦力和反彈物理屬性。
方法說明
void clear() 🔗
清除所有儲存格。
void clear_baked_meshes() 🔗
清除所有烘焙過的網格。見 make_baked_meshes()。
RID get_bake_mesh_instance(idx: int) 🔗
回傳索引為 idx 的烘焙網格的 RID。
回傳目前 GridMap 中存在的已烘焙網格陣列,元素為 ArrayMesh 和 Transform3D。奇數索引為 ArrayMesh,偶數索引為 Transform3D,始終等於 Transform3D.IDENTITY。
這個方法取決於 make_baked_meshes() 的輸出,如果尚未呼叫,則會使用 gen_lightmap_uv 為 true、lightmap_uv_texel_size 為 0.1 進行呼叫。
Basis get_basis_with_orthogonal_index(index: int) const 🔗
返回沿向量 (x,y,z) 的 24 種可能旋轉中的一種,每個分量為 -1、0 或 1。有關詳細資訊,請參閱 Godot 原始程式碼。
int get_cell_item(position: Vector3i) const 🔗
位於給定柵格座標的 MeshLibrary 專案的索引。如果儲存格為空,則將返回 INVALID_CELL_ITEM。
Basis get_cell_item_basis(position: Vector3i) const 🔗
返回為指定儲存格提供方向的基。
int get_cell_item_orientation(position: Vector3i) const 🔗
給定柵格座標處的儲存格的方向。如果該儲存格為空,則返回 -1。
bool get_collision_layer_value(layer_number: int) const 🔗
返回 collision_layer 中是否啟用了指定的層,給定的 layer_number 應在 1 和 32 之間。
bool get_collision_mask_value(layer_number: int) const 🔗
返回 collision_mask 中是否啟用了指定的層,給定的 layer_number 應在 1 和 32 之間。
回傳與柵格中非空單元格對應的陣列,元素為 Transform3D 和 Mesh 參照。變換在區域空間中指定。奇數索引為 Transform3D,偶數索引為 Mesh,與前一個索引處的 Transform3D 對應。
返回該 GridMap 節點用於其儲存格烘焙導覽網格的導覽地圖的 RID。
該函式始終返回在 GridMap 節點上設定的地圖,而不是 NavigationServer 上的地圖。如果直接使用 NavigationServer API 更改地圖,則 GridMap 節點將不會感知到地圖的更改。
Vector3i get_octant_coords_from_cell_coords(cell_coords: Vector3i) const 🔗
回傳 cell_coords(單元格座標)所在的八分體(octant)的 Vector3i(三維整數向量)座標。
Array[Vector3i] get_octants_in_bounds(bounds: AABB) const 🔗
回傳一個包含 Vector3i 卦限座標的陣列,這些卦限位於給定的 bounds 範圍內,包括那些未被使用的單元格所在的卦限。
int get_orthogonal_index_from_basis(basis: Basis) const 🔗
該函式考慮將旋轉離散化為單位球體上的 24 個點,沿向量 (x,y,z) 放置,每個分量為 -1、0 或 1,並返回索引(在 0 到 23 的範圍內 ) 最能代表物體方向的點。 有關詳細資訊,請參閱 Godot 原始程式碼。
Array[Vector3i] get_used_cells() const 🔗
返回一個包含網格中非空儲存格座標的 Vector3 陣列。
Array[Vector3i] get_used_cells_by_item(item: int) const 🔗
返回所有具有 item 中指定的專案索引的儲存格的陣列。
Array[Vector3i] get_used_cells_in_octant(octant_coords: Vector3i) const 🔗
回傳一個包含 Vector3i 的陣列,其中包含位於 octant_coords(八分體座標)處的八分體(octant)內所有非空單元格的座標。
Array[Vector3i] get_used_cells_in_octant_by_item(octant_coords: Vector3i, item: int) const 🔗
回傳一個包含 Vector3i 的陣列, 表示位於 octant_coords 指定卦限內、且使用了指定單元格 item 的單元格座標。
Array[Vector3i] get_used_octants() const 🔗
回傳一個包含 Vector3i 的陣列,其中包含網格地圖(grid map)中所有非空八分體(octant)的座標。
Array[Vector3i] get_used_octants_by_item(item: int) const 🔗
回傳一個包含 Vector3i 的陣列,其中包含網格地圖(grid map)中所有使用了指定 item(物品)的八分體(octant)的座標。
Array[Vector3i] get_used_octants_in_bounds(bounds: AABB) const 🔗
回傳一個包含 Vector3i 的陣列,其中包含在區域 bounds(邊界範圍)內、所有非空八分體(octant)的座標。
Vector3i local_to_map(local_position: Vector3) const 🔗
返回包含給定 local_position 的儲存格的地圖座標。如果 local_position 在全域座標中,請考慮在將其傳遞給該方法之前使用 Node3D.to_local()。另請參閱 map_to_local()。
void make_baked_meshes(gen_lightmap_uv: bool = false, lightmap_uv_texel_size: float = 0.1) 🔗
生成一個烘焙網格,該網格表示分配給 MeshLibrary 的所有網格,會與 LightmapGI 一起使用。如果 gen_lightmap_uv 為 true,則將為目前在 GridMap 中使用的每個網格生成 UV2 資料。否則,只有已經存在 UV2 資料的網格才能使用烘焙光照貼圖。在生成 UV2 時,lightmap_uv_texel_size 控制的是光照貼圖的紋素密度,值越低得到的光照貼圖越詳細。如果 gen_lightmap_uv 為 false,則會忽略 lightmap_uv_texel_size。另見 get_bake_meshes(),相依性本方法的輸出。
注意:呼叫該方法並不會對光照貼圖進行烘焙,因為光照貼圖是使用 LightmapGI 節點烘焙的。
Vector3 map_to_local(map_position: Vector3i) const 🔗
回傳柵格單元格在 GridMap 的區域座標空間中的位置。要將回傳值轉換為全域座標,請使用 Node3D.to_global()。另見 local_to_map()。
void resource_changed(resource: Resource) 🔗
已棄用: Use Resource.changed instead.
這個方法甚麼也不做。
void set_cell_item(position: Vector3i, item: int, orientation: int = 0) 🔗
設定由其柵格座標引用的儲存格的網格索引。
諸如 INVALID_CELL_ITEM 之類的負的專案索引將清除該儲存格。
可選地,可以傳入該專案的方向。有關有效的方向值,請參閱 get_orthogonal_index_from_basis()。
void set_collision_layer_value(layer_number: int, value: bool) 🔗
根據 value,啟用或停用 collision_layer 中指定的層,給定的 layer_number 應在 1 和 32 之間。
void set_collision_mask_value(layer_number: int, value: bool) 🔗
根據 value,啟用或停用 collision_mask 中指定的層,給定的 layer_number 應在 1 和 32 之間。
設定該導覽地圖的 RID,該 GridMap 節點應該用於其儲存格烘焙導覽網格。