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

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

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

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.


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.


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 🔗

Returns an array of Transform3D and Mesh references corresponding to the non-empty cells in the grid. The transforms are specified in local space. Even indices contain Transform3Ds, while odd indices contain Meshes related to the Transform3D in the index preceding it.


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.


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.


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.