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.
Cambiamenti distruttivi
Se stai migrando dalla versione 4.0 alla 4.1, i cambiamenti distruttivi elencati qui potrebbero interessarti. I cambiamenti 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 cambiamento distruttivo influisce su GDScript e se un cambiamento distruttivo 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 il progetto.
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
GDExtension è ancora in versione beta. Finché non sarà contrassegnata come stabile, la compatibilità potrebbe interrompersi durante l'aggiornamento a una nuova versione minore di Godot.
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 aggiuntiva al file .gdextension, in modo che assomigli a quanto segue:
[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.