Atualizando do Godot 3 para o Godot 4
Devo atualizar para Godot 4?
Antes de iniciar o processo de atualização, vale a pena pensar sobre as vantagens e desvantagens que a atualização levaria ao seu projeto.
Advantages of upgrading
Along with the new features present in 4.0, upgrading gives the following advantages:
Muitos bugs são corrigidos no 4.0, mas não podem ser resolvidos no 3.x por várias razões (como diferenças de API gráfica ou compatibilidade retroativa).
4.x will enjoy a longer support period. Godot 3.x will continue to be supported for some time after 4.0 is released, but it will eventually stop receiving support.
See Alterações da Documentação for a list of pages documenting new features in Godot 4.0, and Lista de funcionalidades for a list of all features in Godot.
Disadvantages of upgrading
If you don't need any features present in Godot 4.x, you may want to stay on Godot 3.x for the following reasons:
Os requisitos básicos de hardware do Godot 4 (como o uso de memória) são ligeiramente maiores, tanto para o editor quanto para projetos exportados. Isso foi necessário para a implementação de algumas otimizações centrais.
Já que o Godot 4 inclui mais recursos do que o Godot 3, o tamanho do binário dos projetos exportados do Godot 4 é maior. Embora isso possa ser mitigado otimizando a compilação para tamanho, uma compilação 4.0 com um determinado conjunto de módulos habilitados continuará maior quando comparado com uma compilação 3.x com os mesmos módulos. Isso pode ser um problema quando exportando para a Web, já que o tamanho do binário influencia diretamente o quão rápido o motor pode inicializar (independente da velocidade de download).
Godot 4 does not and will not have support for GLES2 rendering. (There is still support for GLES3 rendering using the new Compatibility renderer, which means that devices without Vulkan support can still run Godot 4.)
Se você pretende atender hardware muito antigo como os gráficos integrados Intel Sandy Bridge (2ª generation), isso impedirá que o projeto seja executado nesse hardware após a atualização. Implementações de softwares OpenGL podem ser usadas para contornar essa limitação, mas elas são muito lentas para jogos.
Considerações ao atualizar
Como o Godot 4 é uma reescrita completa em muitos aspectos, algumas funcionalidades foram infelizmente perdidas no processo. Algumas dessas funcionalidades podem ser restauradas em futuras versões do Godot:
A física da bala foi removida em favor da GodotPhysics. Isso afeta apenas projetos 3D que usaram o motor de física padrão (que foi Bullet) e não o mudaram manualmente para GodotPhysics. Não há planos para re-adicionar a física Bullet no núcleo, mas um add-on de terceiros poderia ser criado para ele graças à GDExtension.
Por padrão, a renderização em 2D não é mais realizada em HDR, o que significa que valores de modulação "superbrilhantes" não têm efeito visível. Desde o Godot 4.2, você pode ativar a configuração de projeto HDR 2D para realizar a renderização em 2D com HDR. Veja também Using glow in 2D.
Embora a renderização ainda ocorra em HDR em 3D ao usar os renderizadores Avançado+ ou Mobile, as Viewports não podem mais retornar dados HDR. Há planos para que isso seja restaurado em algum momento no futuro.
O Mono foi substituído pelo .NET 6. Isso significa que a exportação de projetos C# para Android, iOS e HTML5 não é mais suportada por enquanto. A exportação de projetos C# para plataformas desktop ainda é suportada e, a partir da versão 4.2, há suporte experimental para exportação para plataformas móveis. O suporte para exportação de projetos C# para mais plataformas será restaurado em futuras versões 4.x, conforme o suporte upstream for aprimorado.
You can find a more complete list of functional regressions by searching for issues labeled "regression" but not "bug" on GitHub.
Preparing before the upgrade (optional)
Se você quiser estar pronto para atualizar para o Godot 4 no futuro, considere usar Tweener e o singleton Time no seu projeto. Ambas as classes estão disponíveis no Godot 3.5 e versões posteriores.
Dessa forma, você não dependerá das funções obsoletas de nó Tween e de tempo do sistema operacional, ambas removidas no Godot 4.0.
Também é uma boa ideia renomear os shaders externos para que sua extensão seja .gdshader em vez de .shader. O Godot 3.x suporta ambas as extensões, mas somente .gdshader é suportado no Godot 4.0.
Running the project upgrade tool
Perigo
Faça um backup completo do seu projeto antes de atualizar! A ferramenta de atualização de projeto não fará backup do projeto que está sendo atualizado.
Você pode fazer backup de um projeto usando o controle de versão ou copiando a pasta do projeto para outro local.
Using the Project Manager
Para usar a ferramenta de atualização do projeto:
Open the Godot 4 Project Manager.
Importe o projeto Godot 3.x usando o botão Importar ou use o botão Escanear para encontrar o projeto em uma pasta.
Clique duas vezes no projeto importado (ou selecione o projeto e escolha Editar).
Você verá uma caixa de diálogo com duas opções: Converter apenas project.godot e Converter projeto completo. Após garantir que o backup do seu projeto esteja concluído (veja o aviso acima), escolha Converter projeto completo. Converter apenas project.godot deve ser usado apenas em casos de uso avançado, caso a ferramenta de conversão falhe.
Aguarde a conclusão do processo de conversão do projeto. Isso pode levar alguns minutos para projetos grandes com muitas cenas.
Quando a interface do Gerenciador de Projetos estiver disponível novamente, clique duas vezes no projeto (ou selecione o projeto e escolha Editar) para abri-lo no editor.
Se você tiver problemas de conversão devido a alguns arquivos de projeto serem muito grandes ou longos, você pode usar a linha de comando para atualizar o projeto (veja abaixo). Isso permitirá que você substitua os limites de tamanho do conversor.
Using the command line
Para usar a ferramenta de atualização de projeto da linha de comando, é recomendável validar a conversão do projeto executando o executável do editor Godot com os seguintes argumentos:
# [<max_file_kb>] [<max_line_size>] are optional arguments.
# Remove them if you aren't changing their values.
path/to/godot.binary --path /path/to/project/folder --validate-conversion-3to4 [<max_file_kb>] [<max_line_size>]
Se a lista de atualizações planejadas parecer boa para você, execute o seguinte comando no executável do editor do Godot para atualizar os arquivos do projeto:
# [<max_file_kb>] [<max_line_size>] are optional arguments.
# Remove them if you aren't changing their values.
path/to/godot.binary --path /path/to/project/folder --convert-3to4 [<max_file_kb>] [<max_line_size>]
[<max_file_kb>] e [<max_line_size>] são argumentos opcionais usados para especificar o tamanho máximo dos arquivos a serem convertidos (em kilobytes e linhas). Os limites padrão são 4 MB e 100.000 linhas, respectivamente. Se um arquivo atingir qualquer um desses limites, ele não será atualizado pela ferramenta de conversão de projeto. Isso é útil para evitar que recursos muito grandes deixem o processo de atualização extremamente lento.
Se você ainda quiser que arquivos grandes sejam convertidos pela ferramenta de atualização de projeto, aumente os limites de tamanho ao executá-la. Por exemplo, executar o executável do editor Godot com esses argumentos aumenta ambos os limites em um fator de 10x:
path/to/godot.binary --path /path/to/project/folder --convert-3to4 40000 1000000
Nota
Somente projetos do Godot 3.0 e posteriores podem ser atualizados usando a ferramenta de conversão de projetos encontrada no editor do Godot 4.
É recomendável garantir que seu projeto esteja atualizado com a versão estável 3.x mais recente antes de executar a ferramenta de atualização do projeto.
Corrigindo o projeto após executar a ferramenta de atualização do projeto
Após atualizar o projeto, você poderá notar que algumas coisas não estão como deveriam. Os scripts provavelmente também conterão vários erros (possivelmente centenas em projetos grandes). Isso ocorre porque a ferramenta de atualização do projeto não consegue atender a todas as situações. Portanto, grande parte do processo de atualização permanece manual.
Automatically renamed nodes and resources
A lista abaixo refere-se aos nós que foram simplesmente renomeados para consistência ou clareza no Godot 4.0. A ferramenta de atualização do projeto os renomeia automaticamente nos seus scripts.
Um conjunto notável de renomeações são os nós 3D, que receberam o sufixo 3D para manter a consistência com suas contrapartes 2D. Por exemplo, Area agora é Area3D.
Para facilitar a pesquisa, esta tabela lista todos os nós e recursos, que foram renomeados e convertidos automaticamente, excluindo aqueles que envolveram apenas a adição de um sufixo 3D ao nome antigo:
Nome antigo (Godot 3.x) |
Novo nome (Godot 4) |
|---|---|
AnimatedSprite |
AnimatedSprite2D |
ARVRCamera |
XRCamera3D |
ARVRController |
XRController3D |
ARVRAnchor |
XRAnchor3D |
ARVRInterface |
XRInterface |
ARVROrigin |
XROrigin3D |
ARVRPositionalTracker |
XRPositionalTracker |
ARVRServer |
XRServer |
BoxShape |
BoxShape3D |
CapsuleShape |
CapsuleShape3D |
CubeMesh |
BoxMesh |
EditorSpatialGizmo |
EditorNode3DGizmo |
EditorSpatialGizmoPlugin |
EditorNode3DGizmoPlugin |
GIProbe |
VoxelGI |
GIProbeData |
VoxelGIData |
GradientTexture |
GradientTexture1D |
KinematicBody |
CharacterBody3D |
KinematicBody2D |
CharacterBody2D |
Light2D |
PointLight2D |
LineShape2D |
WorldBoundaryShape2D |
Ouvinte (Listener) |
AudioListener3D |
NavigationMeshInstance |
NavigationRegion3D |
NavigationPolygonInstance |
NavigationRegion2D |
Navigation2DServer |
NavigationServer2D |
PanoramaSky |
Sky |
Partículas |
GPUParticles3D |
Particles2D |
GPUParticles2D |
ParticlesMaterial |
ParticleProcessMaterial |
Physics2DDirectBodyState |
PhysicsDirectBodyState2D |
Physics2DDirectSpaceState |
PhysicsDirectSpaceState2D |
Physics2DServer |
PhysicsServer2D |
Physics2DShapeQueryParameters |
PhysicsShapeQueryParameters2D |
Physics2DTestMotionResult |
PhysicsTestMotionResult2D |
PlaneShape |
WorldBoundaryShape3D |
Position2D |
Marker2D |
Position3D |
Marker3D |
ProceduralSky |
Sky |
RayShape |
SeparationRayShape3D |
RayShape2D |
SeparationRayShape2D |
ShortCut |
Shortcut |
Spatial |
Node3D |
SpatialGizmo |
Node3DGizmo |
SpatialMaterial |
StandardMaterial3D |
Sprite |
Sprite2D |
StreamTexture |
CompressedTexture2D |
TextureProgress |
TextureProgressBar |
VideoPlayer |
VideoStreamPlayer |
ViewportContainer |
SubViewportContainer |
Viewport |
SubViewport |
VisibilityEnabler |
VisibleOnScreenEnabler3D |
VisibilityNotifier |
VisibleOnScreenNotifier3D |
VisibilityNotifier2D |
VisibleOnScreenNotifier2D |
VisibilityNotifier3D |
VisibleOnScreenNotifier3D |
VisualServer |
RenderingServer |
VisualShaderNodeScalarConstant |
VisualShaderNodeFloatConstant |
VisualShaderNodeScalarFunc |
VisualShaderNodeFloatFunc |
VisualShaderNodeScalarOp |
VisualShaderNodeFloatOp |
VisualShaderNodeScalarClamp |
VisualShaderNodeClamp |
VisualShaderNodeVectorClamp |
VisualShaderNodeClamp |
VisualShaderNodeScalarInterp |
VisualShaderNodeMix |
VisualShaderNodeVectorInterp |
VisualShaderNodeMix |
VisualShaderNodeVectorScalarMix |
VisualShaderNodeMix |
VisualShaderNodeScalarSmoothStep |
VisualShaderNodeSmoothStep |
VisualShaderNodeVectorSmoothStep |
VisualShaderNodeSmoothStep |
VisualShaderNodeVectorScalarSmoothStep |
VisualShaderNodeSmoothStep |
VisualShaderNodeVectorScalarStep |
VisualShaderNodeStep |
VisualShaderNodeScalarSwitch |
VisualShaderNodeSwitch |
VisualShaderNodeScalarTransformMult |
VisualShaderNodeTransformOp |
VisualShaderNodeScalarDerivativeFunc |
VisualShaderNodeDerivativeFunc |
VisualShaderNodeVectorDerivativeFunc |
VisualShaderNodeDerivativeFunc |
VisualShaderNodeBooleanUniform |
VisualShaderNodeBooleanParameter |
VisualShaderNodeColorUniform |
VisualShaderNodeColorParameter |
VisualShaderNodeScalarUniform |
VisualShaderNodeFloatParameter |
VisualShaderNodeCubeMapUniform |
VisualShaderNodeCubeMapParameter |
VisualShaderNodeTextureUniform |
VisualShaderNodeTexture2DParameter |
VisualShaderNodeTextureUniformTriplanar |
VisualShaderNodeTextureParameterTriplanar |
VisualShaderNodeTransformUniform |
VisualShaderNodeTransformParameter |
VisualShaderNodeVec3Uniform |
VisualShaderNodeVec3Parameter |
VisualShaderNodeUniform |
VisualShaderNodeParameter |
VisualShaderNodeUniformRef |
VisualShaderNodeParameterRef |
Manually renaming methods, properties, signals and constants
Due to how the project upgrade tool works, not all API renames can be performed automatically. The list below contains all renames that must be performed manually using the script editor.
Se você não conseguir encontrar um nó ou recurso na lista abaixo, consulte a tabela acima para encontrar seu novo nome.
Dica
Você pode usar a caixa de diálogo Substituir em Arquivos para agilizar substituições pressionando Ctrl + Shift + R enquanto o editor de scripts estiver aberto. No entanto, tenha cuidado, pois essa caixa de diálogo não oferece nenhuma forma de desfazer uma substituição. Use controle de versão para confirmar regularmente o progresso do seu trabalho de atualização. Ferramentas de linha de comando como sd também podem ser usadas se você precisar de algo mais flexível do que a caixa de diálogo Substituir em Arquivos do editor.
Se estiver usando C#, lembre-se de procurar por uso obsoleto da API com a notação PascalCase no projeto (e realizar a substituição com a notação PascalCase).
Methods
As classes File e Directory foram substituídas por FileAccess e DirAccess, que possuem uma API totalmente diferente. Vários métodos agora são estáticos, o que significa que você pode chamá-los diretamente em FileAccess ou DirAccess sem precisar criar uma instância dessa classe.
Métodos relacionados à tela e à janela do singleton OS (como
OS.get_screen_size()) foram movidos para o singleton DisplayServer. A nomenclatura dos métodos também foi alterada para o formatoDisplayServer.<objeto>_<get/set>_property(). Por exemplo,OS.get_screen_size()passou a serDisplayServer.screen_get_size().Os métodos de hora e data do singleton OS foram movidos para o singleton Time. (O singleton Time também está disponível no Godot 3.5 e versões posteriores.)
Talvez seja necessário substituir algumas chamadas
instance()porinstantiate(). O conversor deve lidar com isso automaticamente, mas isso depende de código personalizado que pode não funcionar em 100% das situações.O
set_autowrap()do AcceptDialog agora éset_autowrap_mode().process()do AnimationNode agora é_process()(observe o sublinhado inicial, que denota um método virtual).add_animation()do AnimationPlayer agora éadd_animation_library()e agora usa uma AnimationLibrary.AnimationTree's
set_process_mode()is nowset_process_callback().Array's
empty()is nowis_empty().Array's
invert()is nowreverse().Array's
remove()is nowremove_at().get_points()do AStar2D e AStar3D agora éget_points_id().set_event()do BaseButton agora éset_shortcut().Camera2D's
get_h_offset()is nowget_drag_horizontal_offset().get_v_offset()do Camera2D agora éget_drag_vertical_offset().Camera2D's
set_h_offset()is nowset_drag_horizontal_offset().set_v_offset()do Camera2D agora éset_drag_vertical_offset().raise()do CanvasItem agora émove_to_front().update()do CanvasItem agora équeue_redraw().Control's
get_stylebox()is nowget_theme_stylebox().set_tooltip()do controle agora éset_tooltip_text().create_gizmo()do EditorNode3DGizmoPlugin agora é_create_gizmo()(observe o sublinhado inicial, que denota um método virtual).get_peer_port()de ENetMultiplayerPeer agora éget_peer().FileDialog
get_mode()agora éget_file_mode().FileDialog
set_mode()agora éset_file_mode().get_offset()do GraphNode agora éget_position_offset().map_to_world()do GridMap agora émap_to_local().world_to_map()do GridMap agora élocal_to_map().get_rect()do Image agora éget_region().ImmediateGeometry's
set_normal()is nowsurface_set_normal().ImmediateMesh's
set_color()is nowsurface_set_color().ImmediateMesh's
set_uv()is nowsurface_set_uv().get_v_scroll()do ItemList agora éget_v_scroll_bar().get_network_connected_peers()do MultiPlayerAPI agora éget_peers().get_network_peer()do MultiPlayerAPI agora éget_peer().get_network_unique_id()do MultiPlayerAPI agora éget_unique_id().has_network_peer()do MultiPlayerAPI agora éhas_multiplayer_peer().is_refusing_new_network_connections()da MultiplayerAPI agora éis_refusing_new_connections().is_listening()do PacketPeerUDP agora éis_bound().listen()do PacketPeerUDP agora ébind().set_flag()do ParticleProcessMaterial agora éset_particle_flag().PhysicsTestMotionResult2D's
get_motion()is nowget_travel().RenderingServer's
get_render_info()is nowget_rendering_info().get_dependencies()do ResourceFormatLoader agora é_get_dependencies()(observe o sublinhado inicial, que denota um método virtual).ResourceFormatLoader's
load()is now_load().change_scene()do SceneTree agora échange_scene_to_file().O atalho
is_valid()agora éhas_valid_event().map_to_world()do TileMap agora émap_to_local().world_to_map()do TileMap agora élocal_to_map().xform()do Transform2D émat * vecexform_inv()évec * mat.XRPositionalTracker's
get_name()is nowget_tracker_name().XRPositionalTracker's
get_type()is nowget_tracker_type().XRPositionalTracker's
_set_name()is nowget_tracker_name().
Properties
Nota
Se uma propriedade estiver listada aqui, seus métodos getter e setter associados também deverão ser renomeados manualmente, se utilizados no projeto. Por exemplo, set_offset() e get_offset() de PathFollow2D e PathFollow3D devem ser renomeados para set_progress() e get_progress(), respectivamente.
O
devicedo AudioServer agora éoutput_device.O
groupdo BaseButton agora ébutton_group.zfardo Camera3D agora éfar.zneardo Camera3D agora énearA
margemdo Control agora édeslocamento.O
doubleclickdo InputEventMouseButton agora édouble_click.altde InputEventWithModifiers agora éalt_pressed.O
commandde InputEventWithModifiers agora écommand_pressed.O
controlde InputEventWithModifiers agora éctrl_pressed.metade InputEventWithModifiers agora émeta_pressed.shiftde InputEventWithModifiers agora éshift_pressed.percent_visibledo Label agora évisible_ratio.refuse_new_network_connectionsdo MultiPlayerAPI agora érefuse_new_connections.Node's
filenameis nowscene_file_path.rotatedo PathFollow2D agora érotates.O
offsetdo PathFollow2D e PathFollow3D agora éprogress.extentsdo RectangleShape2D agora ésizepercent_visibledo TextureProgressBar agora éshow_percentage.offdo Theme agora éunchecked.ofsdo Theme agora éoffset.ondo Theme agora échecked.window_titledo Window agora étitle.ddo WorldMarginShape2D agora édistance.A propriedade
extentsnos nós CSG e VoxelGI terá que ser substituída porsize, com o valor definido reduzido pela metade (já que não são mais extensões pela metade). Isso também afeta seus métodos setter/getterset_extents()eget_extents().A propriedade
Engine.editor_hintfoi removida em favor do métodoEngine.is_editor_hint(). Isso ocorre porque ela é somente leitura, e propriedades no Godot não são usadas para valores somente leitura.
Enums
FLAG_MAXdo CPUParticles2D agora éPARTICLE_FLAG_MAX.
Signals
instantiatedo FileSystemDock agora éinstance.hidedo CanvasItem agora éhidden. Esta renomeação não se aplica ao métodohide(), apenas ao sinal.tween_all_completeddo Tween agora éloop_finished.changeddo EditorSettings agora ésettings_changed.
Constants
Os nomes das cores agora são escritos em letras maiúsculas e usam sublinhados entre as palavras. Por exemplo,
Color.palegreenagora éColor.PALE_GREEN.As constantes
NOTIFICATION_do MainLoop foram duplicadas paraNode, o que significa que você pode remover o prefixoMainLoop.ao referenciá-las.NOTIFICATION_WM_QUIT_REQUESTdo MainLoop agora éNOTIFICATION_WM_CLOSE_REQUEST.
Checking project settings
Várias configurações do projeto foram renomeadas, e algumas delas tiveram suas enumerações alteradas de maneiras incompatíveis (como a qualidade do filtro de sombra). Isso significa que você pode precisar redefinir alguns valores das configurações do projeto. Certifique-se de que a opção Avançado esteja habilitada na caixa de diálogo de configurações do projeto para que você possa ver todas as configurações do projeto.
Checking Environment settings
As configurações de qualidade gráfica foram movidas das propriedades do Environment para as configurações do projeto. Isso foi feito para facilitar os ajustes de qualidade em tempo de execução, sem a necessidade de acessar o recurso do Environment ativo e, em seguida, modificar suas propriedades.
Como resultado, você terá que configurar as configurações de qualidade do Environment nas configurações do projeto, pois as configurações antigas de qualidade do Environment não são convertidas automaticamente para as configurações do projeto.
Se você tiver um menu de configurações gráficas que alterou as propriedades do ambiente no Godot 3.x, será necessário alterar o código para chamar os métodos RenderingServer que afetam a qualidade dos efeitos do ambiente. Somente o botão de alternância "base" de cada efeito do ambiente e seus botões visuais permanecem no recurso do Environment.
Updating shaders
Houve algumas alterações nos shaders que não são cobertas pela ferramenta de atualização. Você precisará fazer algumas alterações manuais, especialmente se o seu shader usar transformações de espaço de coordenadas ou uma função light() personalizada.
A extensão de arquivo .shader não é mais suportada, o que significa que você deve renomear os arquivos .shader para .gdshader e atualizar as referências adequadamente nos arquivos de cena/recurso usando um editor de texto externo.
Algumas mudanças notáveis que você precisará realizar nos shaders são:
Os modos de filtragem e repetição de textura agora são definidos individualmente por uniforme, em vez de nos próprios arquivos de textura.
hint_albedoagora ésource_color.hint_coloragora ésource_color.Os shaders de partículas não usam mais a função de processador
vertex(). Em vez disso, eles usamstart()eprocess().Nos renderizadores Avançado+ e Mobile, as coordenadas normalizadas de dispositivo (NDC) agora possuem um intervalo Z de
[0.0,1.0]em vez de[-1.0,1.0]. Ao reconstruir as NDC a partir deSCREEN_UVe profundidade, usevec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, depth);em vez devec3 ndc = vec3(SCREEN_UV, depth) * 2.0 - 1.0;. O renderizador Compatibilidade permanece inalterado, utilizando o mesmo intervalo Z de NDC da versão 3.x.O modelo de iluminação mudou. Se o seu shader tiver uma função
light()personalizada, talvez seja necessário fazer alterações para obter o mesmo resultado visual.Na versão 4.3 e posteriores, a técnica de buffer de profundidade Z reverso foi implementada, o que pode danificar shaders avançados. Veja Apresentando o Z Reverso (também conhecido como "Desculpe por danificar seu shader").
See Linguagem de shading for more information.
This list is not exhaustive. If you made all the changes mentioned here and your shader still doesn't work, try asking for help in one of the community channels.
Atualizando scripts para considerar alterações incompatíveis com versões anteriores
Algumas alterações realizadas entre o Godot 3.x e 4 não são renomeações, mas ainda quebram a compatibilidade com versões anteriores devido ao comportamento padrão diferente.
Os exemplos mais notáveis disto são:
Funções de ciclo de vida como
_ready()e_process()não chamam mais implicitamente funções de classes pai com o mesmo nome. Em vez disso, você deve usarsuper()no topo de uma função de ciclo de vida na classe filha para que a função da classe pai seja chamada primeiro.Tanto String quanto StringName agora estão expostos ao GDScript. Isso permite maior otimização, já que StringName foi projetado especificamente para ser usado com strings "constantes" que são criadas uma vez e reutilizadas diversas vezes. Esses tipos não são estritamente equivalentes entre si, o que significa que
is_same("example", &"example")retornafalse. Embora na maioria dos casos sejam intercambiáveis ("example" == &"example"retornatrue), às vezes pode ser necessário substituir"example"por&"example".A sintaxe de setter e getter do GDScript foi alterada, mas é convertida somente parcialmente pela ferramenta de conversão. Na maioria dos casos, alterações manuais são necessárias para que setters e getters voltem a funcionar.
A sintaxe de conexão dos sinais no GDScript foi alterada. A ferramenta de conversão usará a sintaxe baseada em strings, que continua presente no Godot 4, mas é recomendável mudar para a sintaxe baseada em Signal descrita na página vinculada. Dessa forma, strings não são mais envolvidas, evitando problema com erros de nome de sinal que só podem ser descobertos em tempo de execução.
Scripts integrados que são scripts de ferramentas não têm a palavra-chave
toolconvertida na anotação@tool.O nó Tween foi removido em favor dos Tweeners, que também estão disponíveis no Godot 3.5 e versões posteriores. Veja o pull request original para mais detalhes.
randomize()agora é chamado automaticamente no carregamento do projeto, portanto a aleatoriedade determinística com a instância global RandomNumberGenerate requer a configuração manual de uma semente na função_ready()de um script.call_group(),set_group()enotify_group()agora são imediatos por padrão. Se estiver chamando uma função custosa, isso pode causar travamentos quando usado em um grupo com um grande número de nós. Para utilizar chamadas adiadas como antes, substituacall_group(...)porcall_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)(e faça o mesmo comset_group()enotify_group()respectivamente).Em vez de
rotation_degrees, a propriedaderotationé exposta ao editor, sendo exibida automaticamente como graus na aba do Inspetor. Isso pode interromper as animações, pois a conversão não é realizada automaticamente pela ferramenta de conversão.O método
has_no_surface()da AABB foi invertido e renomeado parahas_surface().has_no_area()de AABB e Rect2 foi invertido e renomeado parahas_area().A propriedade
fpsdo AnimatedTexture foi substituída porspeed_scale, que funciona da mesma forma que a propriedadeplayback_speeddo AnimationPlayer.AnimatedSprite2D e AnimatedSprite3D agora permitem valores
speed_scalenegativos. Isso pode interromper as animações se você depender despeed_scaleser fixado internamente em0.0.A propriedade
playingde AnimatedSprite2D e AnimatedSprite3D foi removida. Use o métodoplay()/stop()OU configure a animaçãoautoplayatravés do painel inferior SpriteFrames (mas não ambos ao mesmo tempo).O segundo parâmetro
slice()de Array (end) agora é exclusivo, em vez de inclusivo. Por exemplo, isso significa que[1, 2, 3].slice(0, 1)agora retorna[1]em vez de[1, 2].Os sinais de BaseButton agora são
button_upebutton_down. A propriedadepressedagora ébutton_pressed.A propriedade
rotatingde Camera2D foi substituída porignore_rotation, que tem comportamento invertido.A propriedade
zoomdo Camera2D foi invertida: valores mais altos agora são mais ampliados, em vez de menos.O método
remove_and_skip()da Node foi removido. Se precisar reimplementá-lo em um script, você pode usar a implementação antiga em C++ como referência.OS.get_system_time_secs()deve ser convertido paraTime.get_time_dict_from_system()["second"].O método
save()de ResourceSaver agora tem seus argumentos trocados (resource: Resource, path: String). Isso também se aplica ao método_save()de ResourceFormatSaver.Um StreamPeerTCP deve ter
poll()chamado para atualizar seu estado, em vez de depender deget_status()para pesquisar automaticamente: GH-59582O método
right()da String teve seu comportamento alterado: agora ele retorna um número de caracteres a partir da direita da string, em vez de retornar a parte direita da string a partir de uma posição fornecida. Se você precisar do comportamento antigo, pode usarsubstr()no lugar.is_connected_to_host()foi removido do StreamPeerTCP e PacketPeerUDP conforme GH-59582. Em vez disso,get_status()pode ser usado no StreamPeerTCP eis_socket_connected()pode ser usado em PacketPeerUDP.Em
_get_property_list(), a string de dica de propriedadeor_lesseragora éor_less.Em
_get_property_list(), a string de dica de propriedadenoslideragora éno_slider.VisualShaderNodeVec4Parameter agora aceita um Vector4 como parâmetro em vez de um Quaternion.
Nós/recursos removidos ou substituídos
Esta lista contém todos os nós substituídos por outro nó que requer configuração diferente. A configuração deve ser feita do zero novamente, pois o conversor de projeto não suporta a atualização de configurações existentes:
Removed node |
Closest approximation |
Comente |
|---|---|---|
AnimationTreePlayer |
AnimationTree |
AnimationTreePlayer está obsoleto desde Godot 3.1. |
BakedLightmap |
LightmapGI |
|
BakedLightmapData |
LightmapGIData |
|
BitmapFont |
FontFile |
See Using Fonts. |
Fonte Dinâmica |
FontFile |
|
DynamicFontData |
FontFile |
|
ClippedCamera |
Camera2D or Camera3D |
O formato de pirâmide da câmera foi movido para :ref:'class_Camera3D'. |
InterpolatedCamera |
Camera2D or Camera3D |
|
Navigation2D |
Node2D |
Substituído por outros nós de navegação 2D. |
Navigation3D |
Node3D |
Substituído por outros nós de navegação 3D. |
OpenSimplexNoise |
FastNoiseLite |
Possui parâmetros diferentes e mais tipos de ruído, como o celular (ruído de Worley). Não há suporte para ruído 4D por estar ausente na biblioteca FastNoiseLite. |
ToolButton |
Button |
ToolButton era um botão com a propriedade Flat habilitada por padrão. |
YSort |
Node2D or Control |
CanvasItem tem uma nova propriedade Y Sort Enabled na versão 4.0. |
ProximityGroup |
Node3D |
VisibleOnScreenNotifier3D pode atuar como um substituto. |
Portal |
Node3D |
Oclusão de portais e de salas foi substituída por raster occlusion culling (nó OccluderInstance3D), que requer um processo de configuração diferente. |
Room |
Node3D |
|
RoomManager |
Node3D |
|
RoomGroup |
Node3D |
|
Occluder |
Node3D |
O abate por oclusão Geométrica foi substituído por raster occlusion culling (nó OccluderInstance3D), que requer um processo de configuração diferente. |
OccluderShapeSphere |
Resource |
Ao carregar um projeto antigo, o nó será substituído automaticamente por sua Aproximação mais próxima (mesmo que você não esteja usando a ferramenta de atualização do projeto).
Threading changes
Threading As APIs mudaram na versão 4.0. Por exemplo, o seguinte trecho de código no Godot 3.x deve ser modificado para funcionar no 4.0:
# 3.x
var start_success = new_thread.start(self, "__threaded_background_loader",
[resource_path, thread_num]
)
# 4.0
var start_success = new_thread.start(__threaded_background_loader.bind(resource_path, thread_num))
Thread.is_active() não é mais usado e deve ser convertido para Thread.is_alive().
Ver também
Veja o changelog para uma lista completa de mudanças entre o Godot 3.x e 4.
Quebra de compatibilidade de recursos do ArrayMesh
Se você salvou um recurso ArrayMesh em um arquivo .res ou .tres, o formato usado na versão 4.0 não é compatível com o usado na versão 3.x. Você precisará passar pelo processo de importar o arquivo de malha de origem e salvá-lo como um recurso ArrayMesh novamente.
Lista de métodos, propriedades, sinais e constantes renomeados automaticamente
O arquivo-fonte editor/renames_map_3_to_4.cpp lista todas as renomeações automáticas realizadas pela ferramenta de atualização do projeto. Linhas comentadas referem-se a renomeações da API que não podem ser feitas automaticamente.
Porting editor settings
Godot 3.x e 4.0 usam arquivos de configurações de editor diferentes. Isso significa que suas configurações podem ser alteradas independentemente uma da outra.
Se você deseja transferir suas configurações do Godot 3.x para o Godot 4, abra a pasta de configurações do editor e copie editor_settings-3.tres para editor_settings-4.tres enquanto o editor do Godot 4 estiver fechado.
Nota
Muitos nomes e categorias de configurações foram alterados desde o Godot 3.x. As configurações do editor cujo nome ou categoria foram alterados não serão transferidas para o Godot 4.0; você terá que definir seus valores novamente.
Updating version control settings
O Godot 3.x e o 4.x possuem listas completamente diferentes de arquivos e pastas que devem ser ignorados pelo seu version control system.