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.

GridMap

Eredita: Node3D < Node < Object

Nodo per mappe 3D basate su tile.

Descrizione

GridMap consente di posizionare le mesh su una griglia in modo interattivo. Funziona sia dall'editor sia dagli script, il che può aiutarti a creare editor di livelli nel gioco.

GridMap utilizza una MeshLibrary che contiene un elenco di tasselli (elementi). Ogni tassello è una mesh con materiali, più forme facoltative di collisione e navigazione.

Una GridMap contiene una collezione di celle. Ogni cella della griglia fa riferimento a un tassello nella MeshLibrary. Tutte le celle nella mappa hanno le stesse dimensioni.

Internamente, una GridMap è suddivisa in una collezione sparsa di ottanti per renderizzare e elaborare la fisica in modo efficiente. Ogni ottante ha le stesse dimensioni e può contenere molte celle.

Nota: GridMap non estende VisualInstance3D e quindi non può essere nascosto o mascherato in base a VisualInstance3D.layers. Se fai in modo che una luce non influenzi il primo strato, l'intera GridMap non sarà illuminata dalla luce in questione.

Tutorial

Proprietà

bool

bake_navigation

false

bool

cell_center_x

true

bool

cell_center_y

true

bool

cell_center_z

true

int

cell_octant_size

8

float

cell_scale

1.0

Vector3

cell_size

Vector3(2, 2, 2)

int

collision_layer

1

int

collision_mask

1

float

collision_priority

1.0

DebugVisibilityMode

collision_visibility_mode

0

MeshLibrary

mesh_library

PhysicsMaterial

physics_material

Metodi

void

clear()

void

clear_baked_meshes()

RID

get_bake_mesh_instance(idx: int)

Array

get_bake_meshes()

Basis

get_basis_with_orthogonal_index(index: int) const

int

get_cell_item(position: Vector3i) const

Basis

get_cell_item_basis(position: Vector3i) const

int

get_cell_item_orientation(position: Vector3i) const

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

Array

get_meshes() const

RID

get_navigation_map() const

Vector3i

get_octant_coords_from_cell_coords(cell_coords: Vector3i) const

Array[Vector3i]

get_octants_in_bounds(bounds: AABB) const

int

get_orthogonal_index_from_basis(basis: Basis) const

Array[Vector3i]

get_used_cells() const

Array[Vector3i]

get_used_cells_by_item(item: int) const

Array[Vector3i]

get_used_cells_in_octant(octant_coords: Vector3i) const

Array[Vector3i]

get_used_cells_in_octant_by_item(octant_coords: Vector3i, item: int) const

Array[Vector3i]

get_used_octants() const

Array[Vector3i]

get_used_octants_by_item(item: int) const

Array[Vector3i]

get_used_octants_in_bounds(bounds: AABB) const

Vector3i

local_to_map(local_position: Vector3) const

void

make_baked_meshes(gen_lightmap_uv: bool = false, lightmap_uv_texel_size: float = 0.1)

Vector3

map_to_local(map_position: Vector3i) const

void

resource_changed(resource: Resource)

void

set_cell_item(position: Vector3i, item: int, orientation: int = 0)

void

set_collision_layer_value(layer_number: int, value: bool)

void

set_collision_mask_value(layer_number: int, value: bool)

void

set_navigation_map(navigation_map: RID)


Segnali

cell_size_changed(cell_size: Vector3) 🔗

Emesso quando cell_size cambia.


changed() 🔗

Emesso quando la MeshLibrary di questa GridMap cambia.


Enumerazioni

enum DebugVisibilityMode: 🔗

DebugVisibilityMode DEBUG_VISIBILITY_MODE_DEFAULT = 0

Hide the collisions debug shapes in the editor, and use the debug settings to determine their visibility in game (i.e. SceneTree.debug_collisions_hint or SceneTree.debug_navigation_hint).

DebugVisibilityMode DEBUG_VISIBILITY_MODE_FORCE_SHOW = 1

Always show the collisions debug shapes.

DebugVisibilityMode DEBUG_VISIBILITY_MODE_FORCE_HIDE = 2

Always hide the collisions debug shapes.


Costanti

INVALID_CELL_ITEM = -1 🔗

Elemento di cella non valido che può essere utilizzato in set_cell_item() per cancellare le celle (o rappresentare una cella vuota in get_cell_item()).


Descrizioni delle proprietà

bool bake_navigation = false 🔗

  • void set_bake_navigation(value: bool)

  • bool is_baking_navigation()

Se true, questa GridMap crea una regione di navigazione per ogni cella che utilizza un elemento nella mesh_library con una mesh di navigazione. La regione di navigazione creata utilizzerà la maschera di bit degli strati di navigazione assegnata all'elemento nella MeshLibrary.


bool cell_center_x = true 🔗

  • void set_center_x(value: bool)

  • bool get_center_x()

Se true, gli elementi nella griglia sono centrati sull'asse X.


bool cell_center_y = true 🔗

  • void set_center_y(value: bool)

  • bool get_center_y()

Se true, gli elementi nella griglia sono centrati sull'asse Y.


bool cell_center_z = true 🔗

  • void set_center_z(value: bool)

  • bool get_center_z()

Se true, gli elementi nella griglia sono centrati sull'asse Z.


int cell_octant_size = 8 🔗

  • void set_octant_size(value: int)

  • int get_octant_size()

La dimensione di ogni ottante misurata in numero di celle. Questo si applica a tutti e tre gli assi.


float cell_scale = 1.0 🔗

  • void set_cell_scale(value: float)

  • float get_cell_scale()

La scala degli elementi nelle celle.

Questo non influisce sulle dimensioni delle celle nella griglia, ma solo sugli elementi in esse contenuti. Può essere utilizzato per fare in modo che gli elementi nelle celle si sovrappongano ai loro vicini.


Vector3 cell_size = Vector3(2, 2, 2) 🔗

Le dimensioni delle celle nella griglia.

Ciò non influisce sulle dimensioni delle mesh. Vedi cell_scale.


int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Gli strati di fisica in cui si trova questa GridMap.

Le GridMap si comportano come corpi statici, il che significa che non sono influenzate dalla gravità o da altre forze. Esse influenzano solo altri corpi fisici che entrano in collisione con loro.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Gli strati di fisica in cui questa GridMap rileva le collisioni. Vedi Strati e maschere di collisione nella documentazione per maggiori informazioni.


float collision_priority = 1.0 🔗

  • void set_collision_priority(value: float)

  • float get_collision_priority()

La priorità usata per risolvere le collisioni quando si verifica la penetrazione. Maggiore è la priorità, minore sarà la penetrazione nell'oggetto. Questo può essere utilizzato ad esempio per impedire al giocatore di oltrepassare i limiti di un livello.


DebugVisibilityMode collision_visibility_mode = 0 🔗

Show or hide the GridMap's collision shapes. If set to DEBUG_VISIBILITY_MODE_DEFAULT, this depends on the show collision debug settings.


MeshLibrary mesh_library 🔗

La MeshLibrary assegnata.


PhysicsMaterial physics_material 🔗

Sostituisce le proprietà fisiche predefinite di attrito e rimbalzo per l'intera GridMap.


Descrizioni dei metodi

void clear() 🔗

Cancella tutte le celle.


void clear_baked_meshes() 🔗

Cancella tutte le mesh elaborate. Vedi make_baked_meshes().


RID get_bake_mesh_instance(idx: int) 🔗

Restituisce il RID di una mesh elaborata con l'indice idx specificato.


Array get_bake_meshes() 🔗

Restituisce un array di riferimenti ArrayMesh e Transform3D di tutte le mesh precalcolate presenti nella GridMap attuale. Gli indici pari contengono ArrayMesh, mentre gli indici dispari contengono Transform3D che sono sempre uguali a Transform3D.IDENTITY.

Questo metodo si basa sul risultato del metodo make_baked_meshes(), che verrà chiamato con gen_lightmap_uv impostato su true e lightmap_uv_texel_size impostato su 0.1 se non è ancora stato chiamato.


Basis get_basis_with_orthogonal_index(index: int) const 🔗

Restituisce una delle 24 possibili rotazioni che si trovano lungo i vettori (x,y,z) con ogni componente pari a -1, 0 o 1. Per ulteriori dettagli, fai riferimento al codice sorgente di Godot.


int get_cell_item(position: Vector3i) const 🔗

L'indice dell'elemento nella MeshLibrary situato nelle coordinate della griglia specificate. Se la cella è vuota, verrà restituito INVALID_CELL_ITEM.


Basis get_cell_item_basis(position: Vector3i) const 🔗

Restituisce la base che dà alla cella specificata il suo orientamento.


int get_cell_item_orientation(position: Vector3i) const 🔗

L'orientamento della cella rispetto alle coordinate della griglia specificate. Se la cella è vuota, viene restituito -1.


bool get_collision_layer_value(layer_number: int) const 🔗

Restituisce se lo strato specificato di collision_layer è abilitato o meno, fornito un numero di strato layer_number tra 1 e 32.


bool get_collision_mask_value(layer_number: int) const 🔗

Restituisce se lo strato specificato della collision_mask è abilitato, fornito un numero di strato layer_number tra 1 e 32.


Array get_meshes() const 🔗

Restituisce un array di Transform3D e riferimenti Mesh corrispondenti alle celle non vuote nella griglia. Le trasformazioni sono specificate nello spazio locale. Gli indici pari contengono Transform3D, mentre gli indici dispari contengono Mesh correlati al Transform3D nell'indice che lo precede.


RID get_navigation_map() const 🔗

Restituisce il RID della mappa di navigazione che questo nodo GridMap utilizza per le sue mesh di navigazione precalcolate per cella.

Questa funzione restituisce sempre la mappa impostata sul nodo GridMap e non la mappa sul NavigationServer. Se la mappa viene modificata direttamente con l'API del NavigationServer, il nodo GridMap non sarà a conoscenza della modifica della mappa.


Vector3i get_octant_coords_from_cell_coords(cell_coords: Vector3i) const 🔗

Returns the Vector3i octant coordinates of the octant that the cell at cell_coords belongs to.


Array[Vector3i] get_octants_in_bounds(bounds: AABB) const 🔗

Returns an array of Vector3i octant coordinates that are inside the given bounds, including octants that have no cells in use.


int get_orthogonal_index_from_basis(basis: Basis) const 🔗

Questa funzione considera una discretizzazione delle rotazioni in 24 punti du una sfera unitaria, giacenti lungo i vettori (x,y,z) con ogni componente pari a -1, 0 o 1, e restituisce l'indice (nell'intervallo da 0 a 23) del punto che rappresenta meglio l'orientamento dell'oggetto. Per ulteriori dettagli, fai riferimento al codice sorgente di Godot.


Array[Vector3i] get_used_cells() const 🔗

Restituisce un array di Vector3 con le coordinate delle celle non vuote nella mappa della griglia.


Array[Vector3i] get_used_cells_by_item(item: int) const 🔗

Restituisce un array di tutte le celle con l'indice dell'elemento specificato in item.


Array[Vector3i] get_used_cells_in_octant(octant_coords: Vector3i) const 🔗

Returns an array of Vector3is with the cell coordinates of non-empty cells inside the octant at octant_coords.


Array[Vector3i] get_used_cells_in_octant_by_item(octant_coords: Vector3i, item: int) const 🔗

Returns an array of Vector3is with the cell coordinates of cells inside the octant at octant_coords that use the specified cell item.


Array[Vector3i] get_used_octants() const 🔗

Returns an array of Vector3is with the octant coordinates of the non-empty octants in the grid map.


Array[Vector3i] get_used_octants_by_item(item: int) const 🔗

Returns an array of Vector3is with the octant coordinates of the octants that use the specified item in the grid map.


Array[Vector3i] get_used_octants_in_bounds(bounds: AABB) const 🔗

Returns an array of Vector3is with the octant coordinates of non-empty octants that are inside the local bounds.


Vector3i local_to_map(local_position: Vector3) const 🔗

Restituisce le coordinate della mappa della cella contenente la posizione locale local_position. Se local_position è in coordinate globali, considera di utilizzare Node3D.to_local() prima di passarlo a questo metodo. Vedi anche map_to_local().


void make_baked_meshes(gen_lightmap_uv: bool = false, lightmap_uv_texel_size: float = 0.1) 🔗

Genera una mesh precalcolata che rappresenta tutte le mesh nella MeshLibrary assegnata, da utilizzare con LightmapGI. Se gen_lightmap_uv è true, i dati UV2 verranno generati per ogni mesh attualmente utilizzata nella GridMap. Altrimenti, solo le mesh che hanno già dati UV2 presenti potranno utilizzare le lightmap precalcolate. Durante la generazione di UV2, lightmap_uv_texel_size controlla la densità dei texel per le lightmap, con valori più bassi che producono lightmap più dettagliate. lightmap_uv_texel_size viene ignorato se gen_lightmap_uv è false. Vedi anche get_bake_meshes(), che si basa sul risultato di questo metodo.

Nota: La chiamata a questo metodo non preparerà le lightmap effettivamente, poiché la preparazione è eseguita attraverso il nodo LightmapGI.


Vector3 map_to_local(map_position: Vector3i) const 🔗

Restituisce la posizione di una cella della griglia nello spazio di coordinate locali della GridMap. Per convertire il valore restituito in coordinate globali, utilizza Node3D.to_global(). Vedi anche local_to_map().


void resource_changed(resource: Resource) 🔗

Deprecato: Use Resource.changed instead.

Questo metodo non fa nulla.


void set_cell_item(position: Vector3i, item: int, orientation: int = 0) 🔗

Imposta l'indice mesh per la cella riferita con sue coordinate di griglia.

Un indice elemento negativo come INVALID_CELL_ITEM cancellerà la cella.

Facoltativamente, è possibile passare l'orientamento dell'elemento. Per valori di orientamento validi, vedi get_orthogonal_index_from_basis().


void set_collision_layer_value(layer_number: int, value: bool) 🔗

In base a value, abilita o disabilita lo strato specificato nel collision_layer, fornito un layer_number compreso tra 1 e 32.


void set_collision_mask_value(layer_number: int, value: bool) 🔗

In base a value, abilita o disabilita lo strato specificato nel collision_mask, fornito un layer_number compreso tra 1 e 32.


void set_navigation_map(navigation_map: RID) 🔗

Imposta il RID della mappa di navigazione che questo nodo GridMap dovrebbe usare per le sue mesh di navigazione precalcolate.