This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Un oggetto di collisione può contenere più forme incorporate. Nella fisica 3D, queste possono includere inviluppi convessi e mesh triangolari da file glTF o GLB. Puoi anche usare una tilemap o una risorsa di forma convessa tramite la proprietà Collision Shape dell’oggetto di collisione.
Le forme primitive sono parallelepipedo, sfera e capsula. Per aggiungere una forma primitiva, fai clic con il pulsante destro sull’oggetto di collisione e seleziona Add Shape:

Un parallelepipedo ha una posizione, una rotazione e delle dimensioni (larghezza, altezza e profondità):

Una sfera ha una posizione, una rotazione e un diametro:

Una capsula ha una posizione, una rotazione, un diametro e un’altezza:

Le forme a capsula sono supportate solo quando si usa la fisica 3D (configurata nella sezione Physics del file game.project).
Le forme complesse possono usare la geometria di una tilemap o dati di inviluppi convessi. Da Defold 1.13.2, gli oggetti di collisione 3D possono anche creare inviluppi convessi e forme a mesh triangolare dalle mesh di scene glTF o GLB.
Usa una forma Hull per un’approssimazione convessa di una mesh oppure una forma Mesh quando le collisioni devono seguirne i triangoli, comprese le aree concave come le aperture nella geometria di un livello.
3D in game.project.La mesh selezionata fornisce la propria geometria locale; le trasformazioni dei nodi glTF non vengono applicate. Le forme di collisione Mesh sono supportate dal backend Bullet 3D, anche per gli oggetti di collisione statici e non statici. Non sono supportate dai backend di fisica 2D.
La geometria delle mesh triangolari è di sola lettura nelle API delle forme a runtime. Per modificarne i triangoli, modifica la mesh sorgente e ricrea la build. Consulta Scalare le forme di collisione per la scala dell’oggetto di gioco.
Defold include una funzionalità che consente di generare facilmente forme fisiche per la sorgente di tile usata da una mappa di tile. Il manuale delle sorgenti di tile spiega come aggiungere gruppi di collisione a una sorgente di tile e assegnare i tile ai gruppi di collisione (esempio).
Per aggiungere le collisioni a una mappa di tile:

Tieni presente che la proprietà Group non viene usata in questo caso, poiché i gruppi di collisione sono definiti nella sorgente di tile della mappa di tile.
Nella fisica 3D puoi creare un inviluppo convesso direttamente da una mesh usando la procedura nell’editor descritta sopra. La risorsa .convexshape precedente rimane supportata e può essere creata da punti usando un editor esterno:
.convexshape) usando un editor esterno.Il formato dei file di inviluppo convesso usa lo stesso formato dati di tutti gli altri file Defold, cioè il formato testuale Protobuf. Una forma a inviluppo convesso definisce i punti dell’inviluppo. Nella fisica 2D, i punti devono essere forniti in senso antiorario. In modalità fisica 3D viene usata una nuvola di punti astratta. Esempio 2D:
shape_type: TYPE_HULL
data: 200.000
data: 100.000
data: 0.0
data: 400.000
data: 100.000
data: 0.0
data: 400.000
data: 300.000
data: 0.0
data: 200.000
data: 300.000
data: 0.0
L’esempio precedente definisce i quattro vertici di un rettangolo:
200x300 400x300
4---------3
| |
| |
| |
| |
1---------2
200x100 400x100
Esistono diversi strumenti esterni che si possono usare per creare forme di collisione:
L’oggetto di collisione e le sue forme ereditano la scala dell’oggetto di gioco. Per disattivare questo comportamento, deseleziona la casella Allow Dynamic Transforms nella sezione Physics di game.project. Tieni presente che è supportata solo la scala uniforme e che, se la scala non è uniforme, verrà usato il valore di scala più piccolo.
Le forme primitive possono essere ridimensionate a runtime usando physics.set_shape(). Questa funzione non sostituisce i vertici degli inviluppi convessi né la geometria delle mesh triangolari. Esempio:
-- set capsule shape data
local capsule_data = {
type = physics.SHAPE_TYPE_CAPSULE,
diameter = 10,
height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)
-- set sphere shape data
local sphere_data = {
type = physics.SHAPE_TYPE_SPHERE,
diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)
-- set box shape data
local box_data = {
type = physics.SHAPE_TYPE_BOX,
dimensions = vmath.vector3(10, 10, 5),
}
physics.set_shape("#collisionobject", "my_box_shape", box_data)
Sull’oggetto di collisione deve già esistere una forma del tipo corretto con l’ID specificato.
Le forme di collisione nella fisica 3D possono essere ruotate attorno a tutti gli assi.
Le forme di collisione nella fisica 2D possono essere ruotate solo attorno all’asse z. La rotazione attorno all’asse x o y produce risultati errati e va evitata, anche quando si ruota di 180 gradi per ribaltare di fatto la forma lungo l’asse x o y. Per ribaltare una forma fisica, si consiglia di usare physics.set_hlip(url, flip) e physics.set_vlip(url, flip).
Puoi attivare il debug della fisica per visualizzare le forme di collisione durante l’esecuzione.