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...
Passare da Godot 4.0 a Godot 4.1
Per la maggior parte dei giochi e delle applicazioni creati in 4.0, dovrebbe essere relativamente sicuro migrare a 4.1. Questa pagina intende illustrare tutti gli aspetti a cui prestare attenzione durante la migrazione del proprio progetto.
Modifiche incompatibili
Se stai migrando dalla versione 4.0 alla 4.1, le modifiche incompatibili elencate qui potrebbero interessarti. Le modifiche sono raggruppate per aree/sistemi.
Avvertimento
L'API GDExtension interrompe completamente la compatibilità con la versione 4.1, quindi non è inclusa nella tabella seguente. Consultare la sezione Aggiornamento di GDExtension per 4.1 per ulteriori informazioni.
Questo articolo indica se ogni modifica incompatibile influisce su GDScript e se una modifica incompatibile in C# è compatibile con il binario o compatibile con il codice sorgente:
Compatibile con gli eseguibili - Gli eseguibili esistenti saranno caricati ed eseguiti correttamente senza necessità di ricompilazione e il comportamento in fase di esecuzione non cambierà.
Compatibile con il codice sorgente - Il codice sorgente sarà compilato correttamente senza cambiamenti all'aggiornamento di Godot.
Fondamentali
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
Basis |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
|
Object |
||||
Il metodo |
✔️ |
❌ |
❌ |
|
Transform3D |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
|
UndoRedo |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
|
WorkerThreadPool |
||||
Il metodo |
✔️ |
❌ |
✔️ |
Animazione
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
AnimationNode |
||||
Il metodo |
❌ |
❌ |
❌ |
|
Il metodo |
✔️ |
✔️ |
✔️ |
|
Il metodo |
✔️ |
✔️ |
✔️ |
|
AnimationNodeStateMachinePlayback |
||||
Il metodo |
✔️ |
❌ |
❌ |
Nodi 2D
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
PathFollow2D |
||||
Proprietà |
❌ |
❌ |
❌ |
Nodi 3D
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
Geometry3D |
||||
Il metodo |
✔️ |
✔️ |
❌ |
|
MeshInstance3D |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
|
Node3D |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
|
Il metodo |
✔️ |
✔️ |
✔️ |
Nodi GUI
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
CodeEdit |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
|
RichTextLabel |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
|
Il metodo |
✔️ |
✔️ |
✔️ |
|
Il metodo |
✔️ |
✔️ |
✔️ |
|
Tree |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
Fisica
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
Area2D |
||||
La proprietà |
❌ |
❌ |
❌ |
|
Area3D |
||||
La proprietà |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState2D |
||||
Il metodo |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState3D |
||||
Il metodo |
❌ |
❌ |
❌ |
Renderer
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
RDShaderFile |
||||
Il metodo |
✔️ |
❌ |
❌ |
|
RenderingDevice |
||||
Il metodo |
✔️ |
✔️ |
❌ |
|
RenderingServer |
||||
Il metodo |
✔️ |
❌ |
❌ |
|
SurfaceTool |
||||
Il metodo |
✔️ |
✔️ |
❌ |
Networking
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
WebRTCPeerConnectionExtension |
||||
Il metodo |
✔️ |
❌ |
✔️ |
Estensioni per l'editor
Cambiamento |
Compatibili con GDScript |
Compatibili con eseguibili C# |
Compatibili con codice sorgente C# |
Introdotti |
|---|---|---|---|---|
AnimationTrackEditPlugin |
||||
Tipo |
❌ |
❌ |
❌ |
|
EditorInterface |
||||
Il tipo |
✔️ |
❌ |
❌ |
|
Il metodo |
✔️ |
❌ |
❌ |
|
Il metodo |
✔️ |
❌ |
❌ |
|
EditorResourcePreviewGenerator |
||||
Il metodo |
❌ |
❌ |
❌ |
|
Il metodo |
❌ |
❌ |
❌ |
|
EditorUndoRedoManager |
||||
Il metodo |
✔️ |
✔️ |
✔️ |
Cambiamenti di comportamento
Nella versione 4.1 sono state introdotte alcune modifiche comportamentali che potrebbero richiedere di adattare i propri progetti.
Cambiamento |
Introdotti |
|---|---|
SubViewportContainer |
|
Quando gli eventi di input devono raggiungere i SubViewport e i loro figli, |
|
I nodi |
|
Viewport |
|
I nodi |
Aggiornamento di GDExtension per 4.1
Per risolvere un bug grave, in Godot 4.1 abbiamo dovuto interrompere enormemente la compatibilità binaria e marginalmente la compatibilità del codice sorgente.
Ciò significa che le GDExtension realizzate per Godot 4.0 dovranno essere ricompilate per Godot 4.1 (utilizzando il ramo 4.1 di godot-cpp), con una piccola modifica al loro codice sorgente.
In Godot 4.0, la funzione "entry_symbol" assomiglia a questa:
GDExtensionBool GDE_EXPORT example_library_init(const GDExtensionInterface *p_interface, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);
init_obj.register_initializer(initialize_example_module);
init_obj.register_terminator(uninitialize_example_module);
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
return init_obj.init();
}
Tuttavia, per Godot 4.1, dovrebbe apparire così:
GDExtensionBool GDE_EXPORT example_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);
init_obj.register_initializer(initialize_example_module);
init_obj.register_terminator(uninitialize_example_module);
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
return init_obj.init();
}
Ci sono due piccoli cambiamenti:
Il primo argomento cambia da
const GDExtensionInterface *p_interfaceaGDExtensionInterfaceGetProcAddress p_get_proc_addressIl costruttore per la variabile init_obj ora riceve
p_get_proc_addresscome primo parametro
È necessario anche aggiungere una riga compatibility_minimum in più al file .gdextension, in modo da apparire così:
[configuration]
entry_symbol = "example_library_init"
compatibility_minimum = 4.1
Ciò permette a Godot di sapere che la GDExtension è stata aggiornata e si può caricare in modo sicuro in Godot 4.1.