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.
Checking the stable version of the documentation...
Risoluzione di problemi sulla fisica
Quando si lavora con un motore di fisica, si possono ottenere risultati inaspettati.
Sebbene molti di questi problemi si possano risolvere tramite configurazione, alcuni sono il risultato di bug del motore. Per problemi noti relativi al motore di fisica, consultare i problemi aperti relativi alla fisica su GitHub. Consultare problemi chiusi può anche aiutare a rispondere a domande relative al comportamento del motore di fisica.
Gli oggetti si passano attraverso ad alte velocità
Questo fenomeno è noto come tunneling. Abilitare Continuous CD (rilevamento continuo delle collisioni) nelle proprietà RigidBody può talvolta risolvere il problema. Se questo non aiuta, ci sono altre soluzioni da provare:
Rendere più spesse le forme di collisione statica. Ad esempio, se c'è un pavimento sottile sotto il quale il giocatore non può passare in alcun modo, si può rendere il collisore più spesso della rappresentazione visiva del pavimento.
Modificare la forma di collisione dell'oggetto in rapido movimento in base alla sua velocità di movimento. Più veloce è l'oggetto, più lontana la forma di collisione si dovrebbe estendere dall'oggetto, per garantire che possa collidere con pareti sottili in modo più affidabile.
Aumentare Tick di fisica al secondo nelle Impostazioni avanzate del progetto. Sebbene ciò offra altri vantaggi (come una simulazione più stabile e una latenza degli input ridotta), aumenta l'utilizzo della CPU e potrebbe non essere fattibile per le piattaforme mobile/web. È preferibile utilizzare moltiplicatori del valore predefinito di
60(come120,180o240) per un aspetto fluido sulla maggior parte dei display.
Gli oggetti impilati sono instabili e traballanti
Nonostante sembri un problema semplice, la stabile simulazione di RigidBody con oggetti impilati è difficile da implementare in un motore di fisica. Questo è dovuto all'integrazione di forze che agiscono l'una contro l'altra. Più oggetti impilati ci sono, più intense saranno le forze che agiscono l'una contro l'altra. Ciò, eventualmente, rende la simulazione traballante, impedendo agli oggetti di appoggiarsi l'uno sull'altro senza muoversi.
Aumentare la frequenza di simulazione fisica può aiutare ad alleviare questo problema. Per farlo, aumentare Tick di fisica al secondo nelle Impostazioni avanzate del progetto. Si noti che questo aumenta l'utilizzo della CPU e potrebbe non essere fattibile per le piattaforme mobile/web. È preferibile utilizzare moltiplicatori del valore predefinito di 60 (come 120, 180 o 240) per un aspetto fluido sulla maggior parte dei display.
In 3D, anche passare dal motore di fisica predefinito GodotPhysics a Jolt può migliorare la stabilità. Consultare Utilizzare Jolt Physics per ulteriori informazioni.
I corpi fisici o le forme di collisione ridimensionati non collidono correttamente
Godot attualmente non supporta cambiare la scala dei corpi fisici o delle forme di collisione. Come alternativa, modificare le estensioni della forma di collisione anziché cambiarne la scala. Se si desidera che anche la scala della rappresentazione visiva cambi, cambiare la scala della rappresentazione visiva sottostante (Sprite2D, MeshInstance3D, ...) e modificare separatamente le estensioni della forma di collisione. In questo caso, assicurarsi che la forma di collisione non sia figlia della rappresentazione visiva.
Poiché le risorse sono condivise come predefinito, sarà necessario rendere univoca la risorsa forma di collisione se non si desidera che la modifica sia applicata a tutti i nodi che utilizzano la stessa risorsa nella scena. Questo si può fare in due modi:
Nell'editor, cliccando su nel menu a tendina della risorsa CollisionShape nell'ispettore, e poi modificandone le dimensioni.
In uno script, chiamando
duplicate()sulla risorsa forma di collisione prima di modificarne le dimensioni.
Gli oggetti sottili sono traballanti quando poggiano sul pavimento
Ciò può essere dovuto a una di due cause:
La forma di collisione del pavimento è troppo sottile.
La forma del RigidBody è troppo sottile.
Nel primo caso, questo problema si può allievare rendendo più spessa la forma di collisione del pavimento. Ad esempio, se c'è un pavimento sottile sotto il quale il giocatore non può passare in alcun modo, si può rendere il collisore più spesso della rappresentazione visiva del pavimento.
Nel secondo caso, questo si può risolvere solo aumentando la frequenza di simulazione fisica (poiché rendere la forma più spessa causerebbe una disconnessione tra la rappresentazione visiva del RigidBody e la sua collisione).
In entrambi i casi, aumentare la frequenza di simulazione fisica può aiutare ad alleviare questo problema. Per farlo, aumentare Tick di fisica al secondo nelle Impostazioni avanzate del progetto. Si noti che questo aumenta l'utilizzo della CPU e potrebbe non essere fattibile per le piattaforme mobile/web. È preferibile utilizzare moltiplicatori del valore predefinito di 60 (come 120, 180 o 240) per un aspetto fluido sulla maggior parte dei display.
Le forme cilindriche di collisione non sono stabili
Passare dal motore di fisica predefinito GodotPhysics a Jolt dovrebbe rendere le forme cilindriche di collisione più affidabili. Consultare Utilizzare Jolt Physics per ulteriori informazioni.
Durante la transizione da Bullet a GodotPhysics in Godot 4, è stato necessario reimplementare le forme cilindriche di collisione da zero. Tuttavia, le forme cilindriche di collisione sono tra le più difficili da supportare, motivo per cui molti altri motori di fisica non le supportano. Attualmente sono noti diversi bug relativi alle forme cilindriche di collisione.
Se è preferito usare GodotPhysics, per ora consigliamo di usare forme di collisione a scatola o a capsula per i personaggi. Le forme a scatola generalmente offrono la migliore affidabilità, ma hanno lo svantaggio di occupare più spazio in diagonale. Le forme di collisione a capsula non hanno questo svantaggio, ma la loro forma può rendere più difficile il platforming con precisione.
La simulazione di VehicleBody è instabile, soprattutto ad alte velocità
Quando un corpo fisico si muove ad alta velocità, percorre una grande distanza tra ogni passo di fisica. Ad esempio, utilizzando la convenzione 1 unità = 1 metro in 3D, un veicolo che si muove a 360 km/h percorrerà 100 unità al secondo. Con la frequenza di simulazione fisica predefinita di 60 Hz, il veicolo si muove di circa 1,67 unità a ogni tick di fisica. Ciò significa che gli oggetti di piccole dimensioni potrebbero essere completamente ignorati dal veicolo (a causa del tunneling), ma anche che la simulazione ha pochi dati con cui lavorare in generale a una velocità così elevata.
I veicoli ad alta velocità possono beneficiare molto da una maggiore frequenza di simulazione fisica. Per farlo, aumentare Tick di fisica al secondo nelle Impostazioni avanzate del progetto. Si noti che questo aumenta l'utilizzo della CPU e potrebbe non essere fattibile per le piattaforme mobile/web. È preferibile utilizzare moltiplicatori del valore predefinito di 60 (come 120, 180 o 240) per un aspetto fluido sulla maggior parte dei display.
La collisione provoca urti quando un oggetto si muove tra tasselli
Ciò è un problema noto del motore di fisica, causato dall'urto dell'oggetto sui bordi di una forma, anche se quel bordo è coperto da un'altra forma. Può accadere sia in 2D sia in 3D.
Il modo migliore per aggirare questo problema è creare un collisore "composito". Ciò significa che, invece di far collidere i singoli tasselli, si crea una singola forma di collisione che rappresenta la collisione per un gruppo di tasselli. In genere, si dovrebbero suddividere i collisori compositi in base alle singole isole (il che significa che ogni gruppo di tasselli in contatto ha il proprio collisore).
Utilizzare un collisore composito può anche migliorare le prestazioni della simulazione fisica in alcuni casi. Tuttavia, poiché la forma composita di collisione è molto più complessa, ciò potrebbe non risultare in un netto positivo sulle prestazioni in tutti i casi.
Suggerimento
In Godot 4.5 e versioni successive, la creazione di un collisore composito è eseguita automaticamente se si utilizza un nodo TileMapLayer. La dimensione del blocco (predefinito su 16 tasselli su ciascun asse) si può impostare tramite la proprietà Dimensione di quadranti di fisica nell'ispettore di TileMapLayer. Valori più elevati rendono le collisioni più affidabili, a scapito di aggiornamenti più lenti quando la TileMap viene modificata.
Il frame rate cala quando un oggetto tocca un altro oggetto
Ciò è probabilmente dovuto al fatto che uno degli oggetti utilizza una forma di collisione troppo complessa. Le forme convesse di collisione dovrebbero usare il minor numero possibile di forme per motivi di prestazioni. Quando ci si affida alla generazione automatica di Godot, è possibile che si ottengano decine, se non centinaia, di forme create per una singola risorsa forma convessa di collisione.
In alcuni casi, sostituire un collisore convesso con un paio di forme primitive di collisione (scatola, sfera o capsula) può offrire prestazioni migliori.
Questo problema può avvenire anche con i corpi statici che utilizzano collisioni concave (trimesh) molto dettagliate. In questo caso, si consiglia usare una rappresentazione semplificata della geometria del livello come collisore. Ciò non solo migliorerà notevolmente le prestazioni della simulazione, ma può anche migliorare la stabilità, consentendo di escludere piccoli infissi e fessure dalle collisioni.
In 3D, passare dal motore di fisica predefinito GodotPhysics a Jolt può migliorare le prestazioni. Consultare la documentazione Utilizzare Jolt Physics per ulteriori informazioni.
Il framerate cala improvvisamente a un valore molto basso oltre una certa quantità di simulazione della fisica
Questo accade perché il motore di fisica non riesce a tenere il passo con la frequenza di simulazione prevista. In questo caso, il framerate inizierà a diminuire, ma al motore è concesso simulare solo un certo numero di passaggi fisici per ogni frame renderizzato. Questo porta a una reazione a catena in cui il framerate continua a calare fino a raggiungere un valore molto basso (in genere 1-2 FPS), fenomeno noto come spirale della morte della fisica.
Per evitarlo, è consigliabile individuare situazioni nel progetto che possono causare un numero eccessivo di simulazioni fisiche alla volta (o con forme di collisione eccessivamente complesse). Se queste situazioni sono inevitabili, è possibile aumentare il valore massimo di Passi massimi di fisica per frame e/o ridurre il valore di Tick di fisica al secondo per mitigare il problema.
La simulazione della fisica è inaffidabile quando molto lontani dall'origine del mondo
Questo è causato da errori di precisione in virgola mobile, che diventano più pronunciati man mano che la simulazione della fisica si allontana dall'origine del mondo. Questo problema influisce anche sul rendering, causando movimenti traballanti della telecamera quando ci si trova lontano dall'origine del mondo. Consultare Coordinate di mondi ampi per ulteriori informazioni.