Manuals
Manuals




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

Forme di collisione

Un componente di collisione può usare più forme primitive oppure una singola forma complessa.

Forme primitive

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:

Aggiunta di una forma primitiva

Forma a parallelepipedo

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

Forma a parallelepipedo

Forma sferica

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

Forma sferica

Forma a capsula

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

Forma sferica

Le forme a capsula sono supportate solo quando si usa la fisica 3D (configurata nella sezione Physics del file game.project).

Forme complesse

Una forma complessa può essere creata da un componente mappa di tile oppure da una forma a inviluppo convesso.

Forma di collisione di una mappa di tile

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:

  1. Aggiungi la mappa di tile a un oggetto di gioco facendo clic con il pulsante destro sull’oggetto di gioco e selezionando Add Component File. Seleziona il file della mappa di tile.
  2. Aggiungi un componente oggetto di collisione all’oggetto di gioco facendo clic con il pulsante destro sull’oggetto di gioco e selezionando Add Component ▸ Collision Object.
  3. Invece di aggiungere forme al componente, imposta la proprietà Collision Shape sul file tilemap.
  4. Configura le Properties del componente oggetto di collisione come di consueto.

Collisione della sorgente 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.

Forma a inviluppo convesso

Defold include una funzionalità che consente di creare una forma a inviluppo convesso a partire da tre o più punti.

  1. Crea un file di forma a inviluppo convesso (con estensione .convexshape) usando un editor esterno.
  2. Modifica manualmente il file usando un editor di testo o uno strumento esterno (vedi sotto)
  3. Invece di aggiungere forme al componente oggetto di collisione, imposta la proprietà Collision Shape sul file della forma convessa.

Formato del file

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

Strumenti esterni

Esistono diversi strumenti esterni che si possono usare per creare forme di collisione:

Modifica della scala delle 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.

Ridimensionamento delle forme di collisione

Le forme di un oggetto di collisione possono essere ridimensionate durante l’esecuzione usando physics.set_shape(). 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.

Rotazione delle forme di collisione

Rotazione delle forme di collisione nella fisica 3D

Le forme di collisione nella fisica 3D possono essere ruotate attorno a tutti gli assi.

Rotazione delle forme di collisione nella fisica 2D

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).

Debug

Puoi attivare il debug della fisica per visualizzare le forme di collisione durante l’esecuzione.