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.

Utilizzo di GridMap

Introduzione

Le Gridmap nei giochi 2D. Si parte da una collezione preconfigurata di mesh 3D (una MeshLibrary) posizionabili su una griglia, come se si stesse costruendo un livello con una quantità illimitata di mattoncini Lego.

È possibile anche aggiungere collisioni e navigazione alle mesh, proprio come si farebbe con i tasselli di una tilemap.

Progetto d'esempio

Per imparare come funzionano le GridMap, inizia scaricando il progetto di esempio: gridmap_starter.zip.

Decomprimi questo progetto e aggiungilo al Gestore dei progetti tramite il pulsante "Importa". Potrebbe comparire una finestra che indica la necessità di convertire il progetto in una versione più recente di Godot; clicca su Converti project.godot.

Creare una MeshLibrary

Per cominciare, è necessario una MeshLibrary, ovvero una raccolta di singole mesh utilizzabili nella gridmap. Apri la scena "mesh_library_source.tscn" per vedere un esempio di come configurare la libreria di mesh.

../../_images/gridmap_meshlibrary1.webp

Come puoi vedere, questa scena ha un nodo Node3D come radice e un certo numero di nodi MeshInstance3D figli.

Se non hai bisogno di fisica nella scena, allora hai finito. Tuttavia, nella maggior parte dei casi vorrai assegnare dei corpi di collisione alle mesh.

Collisioni

You can manually assign a StaticBody3D and CollisionShape3D to each mesh. Alternatively, you can use the "Mesh" menu to automatically create the collision body based on the mesh data.

../../_images/gridmap_create_body.webp

Note that a "Convex" collision body will work better for simple meshes. For more complex shapes, select "Create Trimesh Static Body". Once each mesh has a physics body and collision shape assigned, your mesh library is ready to be used.

../../_images/gridmap_mesh_scene.webp

Materiali

Only the materials from within the meshes are used when generating the mesh library. Materials set on the node will be ignored.

Lightmap

È possibile precalcolare le lightmap su una GridMap. I dati UV2 delle lightmap saranno riutilizzati dalle mesh, se già presenti. Se i dati UV2 non sono presenti, saranno generati automaticamente durante il precalcolo con una dimensione dei texel nella lightmap di 0,1 unità. Per generare dati UV2 con una dimensione dei texel diversa, è possibile impostare la modalità di illuminazione globale nel pannello Importa su Lightmap statiche e specificare lì la dimensione dei texel. Questa opzione si deve modificare prima che la scena venga convertita in una MeshLibrary, poiché modificandola dopo non influirà sui dati esistenti nella MeshLibrary.

Oltre questa particolarità, il processo di precalcolo delle lightmap è lo stesso di qualsiasi altra scena 3D. Vedi Using Lightmap global illumination per ulteriori informazioni sul precalcolo delle lightmap.

Formato MeshLibrary

Per riassumere i vincoli specifici del formato MeshLibrary, una scena MeshLibrary ha un Node3D come nodo radice e diversi nodi figli che diventeranno elementi di una MeshLibrary. Ogni figlio del nodo radice deve:

  • Essere un MeshInstance3D, che diventerà l'elemento della MeshLibrary. Solo questa mesh visiva sarà esportata.

  • Avere un materiale, nello slot dei materiali della mesh, non negli slot dei materiali del MeshInstance3D.

  • Avere fino a un solo figlio StaticBody3D, per le collisioni. Lo StaticBody3D deve avere uno o più figli CollisionShape3D.

  • Avere fino a un solo figlio NavigationRegion3D, per la navigazione. L'oggetto NavigationRegion3D può avere uno o più figli MeshInstance3D aggiuntivi, che è possibile precalcolare per la navigazione, ma non saranno esportati come mesh visiva.

È riconosciuto solo questo formato specifico. Altri tipi di nodi inseriti come figli non saranno riconosciuti ed esportati. GridMap non è un sistema generico per posizionare di nodi su una griglia, bensì un sistema specifico e ottimizzato, progettato per posizionare mesh con collisioni e navigazione.

Esportare la MeshLibrary

Per esportare la libreria, clicca su Scena > Esporta come... > MeshLibrary... e salvala come risorsa.

../../_images/gridmap_export.webp

È possibile trovare una MeshLibrary già esportata nel progetto, denominata MeshLibrary.tres.

Utilizzo di GridMap

Crea una nuova scena e aggiungi un nodo GridMap. Aggiungi la libreria di mesh trascinando il file risorsa dal pannello Filesystem e rilasciandolo nella proprietà Mesh Library nell'Ispettore.

../../_images/gridmap_mesh_library_inspector.webp

Proprietà nelll'Ispettore

L'impostazione Physics Material consente di sovrascrivere il materiale fisico per ogni mesh nella NavigationMesh.

Nella sezione Cells, la proprietà Size dovrebbe essere impostata sulla dimensione delle tue mesh. Puoi lasciarla al valore predefinito per la demo. Disabilita la proprietà Center Y.

Le opzioni Collision consentono di impostare lo strato di collisione, la maschera di collisione e la priorità per l'intera griglia. Per ulteriori informazioni su come funzionano, consulta la sezione Fisica.

Nella sezione Navigation è presente l'opzione "Bake Navigation". Se abilitata, crea un'area di navigazione per ogni cella che utilizza un elemento della libreria di mesh con una mesh di navigazione.

Cliccando sulla libreria di mesh stessa nell'ispettore, è possibile regolare le impostazioni delle singole mesh, come la loro mesh di navigazione, gli strati di navigazione o se la mesh proietta ombre.

../../_images/gridmap_mesh_library_settings.webp

Pannello GridMap

In basso alll'editor si trova il pannello GridMap, che dovrebbe essersi aperto automaticamente quando hai aggiunto il nodo GridMap.

../../_images/gridmap_panel.webp

Da sinistra e destra nella barra degli strumenti:

  • Transform: Adds a gizmo to the scene that allows you to change the relative position and rotation of the gridmap in the scene.

  • Selection: While active you can select an area in the viewport, click and drag to select more than one space on the grid.

  • Erase: While active, click in the viewport and delete meshes.

  • Paint: While active, click in the viewport and add whatever mesh is currently selected in the GridMap panel to the scene.

  • Pick: While active, clicking on a gridmap mesh in the viewport will cause it to be selected in the GridMap panel.

  • Fill: Fill the area that has been selected in the viewport with whatever mesh is selected in the GridMap bottom panel.

  • Move: Move whatever mesh or meshes are currently selected in the viewport.

  • Duplicate: Create a copy of whatever the selected mesh or meshes in the GridMap are.

  • Delete: Similar to erase, but for the entire selected area.

  • Cursor Rotate X: While the paint tool is selected, this will rotate the mesh that will be painted on the X-axis. This will also rotate selected areas if they are being moved.

  • Cursor Rotate Y: While the paint tool is selected, this will rotate the mesh that will be painted on the Y-axis. This will also rotate selected areas if they are being moved.

  • Cursor Rotate Z: While the paint tool is selected, this will rotate the mesh that will be painted on the Z-axis. This will also rotate selected areas if they are being moved.

  • 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: Used to search for a specific mesh in the bottom panel.

  • Zoom: Controls the zoom level on meshes in the bottom panel.

  • Layout toggles: These two buttons toggle between different layouts for meshes in the bottom panel.

  • Tools dropdown: This button opens a dropdown menu with a few more options.

../../_images/gridmap_dropdown.webp

Clicking on Settings in that dropdown brings up a window that allows you to change the Pick Distance, which is the maximum distance at which tiles can be placed on a GridMap, relative to the camera position (in meters).

Using GridMap in code

See GridMap for details on the node's methods and member variables.