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...
Godot 3에서 Godot 4로 업그레이드
Godot 4로 업그레이드해야 하나요?
업그레이드 프로세스를 시작하기 전에 업그레이드로 인해 프로젝트에 가져올 장점과 단점에 대해 생각해 보는 것이 좋습니다.
업그레이드의 장점
godot-cpp 저장소 의 사본.
4.0에서는 많은 버그가 수정되었지만 3.x에서는 여러 가지 이유로(예: 그래픽 API 차이 또는 이전 버전과의 호환성) 해결할 수 없습니다.
4.x에서는 지원 기간이 더 길어집니다. Godot 3.x는 4.0이 출시된 후에도 한동안 계속 지원되지만 결국 지원을 중단하게 됩니다.
Godot 4.0의 새로운 기능을 문서화한 페이지 목록은 :ref:`doc_docs_changelog`를, Godot의 모든 기능 목록은 :ref:`doc_list_of_features`를 참조하세요.
업그레이드의 단점
Godot 4.x에 있는 어떤 기능도 *필요*하지 않다면 다음과 같은 이유로 Godot 3.x를 계속 사용하는 것이 좋습니다:
Godot 4의 기본 하드웨어 요구 사항(예: 메모리 사용량)은 편집기와 내보낸 프로젝트 모두에서 약간 더 높습니다. 이는 일부 핵심 최적화를 구현하는 데 필요했습니다.
Godot 4에는 Godot 3보다 더 많은 기능이 포함되어 있으므로 내보낸 프로젝트에 대한 Godot 4의 바이너리 크기가 더 큽니다. 크기에 맞게 빌드 최적화를 통해 이 문제를 완화할 수 있지만, 특정 활성화된 모듈 세트가 포함된 4.0 빌드는 동일한 모듈이 포함된 3.x 빌드에 비해 더 큰 상태로 유지됩니다. 이는 웹으로 내보내기에 문제가 될 수 있습니다. 바이너리 크기는 다운로드 속도에 관계없이 엔진이 초기화되는 속도에 직접적인 영향을 미치기 때문입니다.
Godot 4는 GLES2 렌더링을 지원하지 않으며 앞으로도 지원하지 않을 것입니다. (새로운 호환성 렌더러를 사용하는 GLES3 렌더링은 여전히 지원됩니다. 이는 Vulkan을 지원하지 않는 장치에서도 여전히 Godot 4를 실행할 수 있음을 의미합니다.)
Intel Sandy Bridge(2세대) 통합 그래픽과 같은 매우 오래된 하드웨어를 대상으로 하는 경우 업그레이드 후 해당 하드웨어에서 프로젝트가 실행되지 않습니다. 소프트웨어 OpenGL 구현을 사용하면 이 제한을 우회할 수 있지만 게임을 하기에는 너무 느립니다.
업그레이드 주의사항
Godot 4는 여러 측면에서 완전히 재작성되었기 때문에 불행하게도 일부 기능이 그 과정에서 사라졌습니다. 이러한 기능 중 일부는 향후 Godot 릴리스에서 복원될 수 있습니다:
GodotPhysics를 위해 총알 물리학이 제거되었습니다. 이는 기본 물리 엔진(Bullet)을 사용하고 수동으로 GodotPhysics로 변경하지 않은 3D 프로젝트에만 영향을 미칩니다. 코어에 Bullet 물리학을 다시 추가할 계획은 없지만 GDExtension 덕분에 이를 위한 타사 추가 기능을 만들 수 있습니다.
기본적으로 2D 렌더링은 더 이상 HDR에서 수행되지 않습니다. 즉, "과도하게 밝은" 변조 값은 시각적 효과가 없습니다. Godot 4.2부터 프로젝트 설정 :ref:`HDR 2D<class_ProjectSettings_property_rendering/viewport/hdr_2d>`를 활성화하여 HDR에서 2D 렌더링을 수행할 수 있습니다. :ref:`doc_environment_and_post_processing_using_glow_in_2d`도 참조하세요.
Forward+ 또는 모바일 렌더러를 사용할 때 3D의 HDR에서 렌더링이 계속 발생하는 동안 뷰포트는 더 이상 HDR 데이터를 반환할 수 없습니다. 이는 향후 어느 시점에 복원될 예정입니다.
Mono는 .NET 6으로 대체되었습니다. 이는 C# 프로젝트를 Android, iOS 및 HTML5로 내보내는 것이 현재 더 이상 지원되지 않음을 의미합니다. C# 프로젝트를 데스크톱 플랫폼으로 내보내는 기능은 계속 지원되며, 4.2부터 모바일 플랫폼으로 내보내기 위한 실험적 지원이 제공됩니다. 업스트림 지원이 향상됨에 따라 C# 프로젝트를 더 많은 플랫폼으로 내보내는 지원은 향후 4.x 릴리스에서 복원될 예정입니다.
Github에서 열린 HTML5 이슈 목록을 확인해서 관심있는 기능에 아직 이슈가 있는지 찾아보세요. 기능이 아직 없다면 하나를 열어서 관심있는 기능을 이야기를 해보세요.
프로젝트 준비하기
나중에 Godot 4로 업그레이드할 준비를 하고 싶다면 프로젝트에서 Tweener 및 Time 싱글톤 사용을 고려해보세요. 이 클래스는 둘 다 Godot 3.5 이상에서 사용할 수 있습니다.
이렇게 하면 Godot 4.0에서 제거된 더 이상 사용되지 않는 Tween 노드 및 OS 시간 기능에 의존하지 않게 됩니다.
확장자가 .shader 대신 .gdshader가 되도록 외부 셰이더의 이름을 바꾸는 것도 좋은 생각입니다. Godot 3.x는 두 확장을 모두 지원하지만 Godot 4.0에서는 .gdshader만 지원됩니다.
프로젝트 경로 설정하기
위험
업그레이드하기 전에 프로젝트 전체를 백업하세요! 프로젝트 업그레이드 도구는 업그레이드 중인 프로젝트의 백업을 수행하지 않습니다.
버전 관리를 사용하거나 프로젝트 폴더를 다른 위치에 복사하여 프로젝트를 백업할 수 있습니다.
프로젝트 매니저
프로젝트 업그레이드 도구 사용하기:
프로젝트 매니저
가져오기 버튼을 사용하여 Godot 3.x 프로젝트를 가져오거나 스캔 버튼을 사용하여 폴더 내에서 프로젝트를 찾으세요.
가져온 프로젝트를 두 번 클릭합니다(또는 프로젝트를 선택한 다음 편집 선택).
Convert project.godot Only 및 Convert Full 프로젝트라는 두 가지 옵션이 있는 대화 상자가 표시됩니다. 프로젝트가 백업되었는지 확인한 후(위 경고 참조) Convert Full 프로젝트를 선택합니다. Convert project.godot Only는 변환 도구가 실패하는 경우 만 고급 사용 사례에 사용하기 위한 것입니다.
프로젝트 변환 프로세스가 완료될 때까지 기다리십시오. 장면이 많은 대규모 프로젝트의 경우 최대 몇 분이 걸릴 수 있습니다.
프로젝트 관리자 인터페이스를 다시 사용할 수 있게 되면 프로젝트를 두 번 클릭하여(또는 프로젝트를 선택한 다음 편집 선택) 편집기에서 엽니다.
일부 프로젝트 파일이 너무 크거나 길어서 변환 문제가 발생한 경우 명령줄을 사용하여 프로젝트를 업그레이드할 수 있습니다(아래 참조). 이렇게 하면 변환기의 크기 제한을 무시할 수 있습니다.
명령줄에서 내보내기
명령줄에서 프로젝트 업그레이드 도구를 사용하려면 다음 인수를 사용하여 Godot 편집기 바이너리를 실행하여 프로젝트 변환을 검증하는 것이 좋습니다:
# [<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>]
계획된 업그레이드 목록이 마음에 든다면 Godot 편집기 바이너리에서 다음 명령을 실행하여 프로젝트 파일을 업그레이드하세요:
# [<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>] 및 [<max_line_size>]는 변환할 파일의 최대 크기(킬로바이트 및 라인 단위)를 지정하는 선택적 인수입니다. 기본 제한은 각각 4MB와 100,000줄입니다. 파일이 이러한 제한 중 하나에 도달하면 프로젝트 변환기에 의해 업그레이드되지 않습니다. 이는 대규모 리소스로 인해 크롤링으로의 업그레이드 속도가 느려지는 것을 방지하는 데 유용합니다.
프로젝트 업그레이드 도구를 사용하여 대용량 파일을 변환하려면 프로젝트 업그레이드 도구를 실행할 때 크기 제한을 늘리세요. 예를 들어, 해당 인수를 사용하여 Godot 편집기 바이너리를 실행하면 두 제한이 모두 10배 증가합니다:
path/to/godot.binary --path /path/to/project/folder --convert-3to4 40000 1000000
참고
Godot 3.0 이상의 프로젝트만 Godot 4 편집기에 있는 프로젝트 변환 도구를 사용하여 업그레이드할 수 있습니다.
프로젝트 업그레이드 도구를 실행하기 전에 프로젝트가 최신 3.x 안정 릴리스로 최신 상태인지 확인하는 것이 좋습니다.
프로젝트 업그레이드 도구 실행 후 프로젝트 수정
프로젝트를 업그레이드한 후 특정 사항이 원하는 대로 표시되지 않는 것을 확인할 수 있습니다. 스크립트에는 다양한 오류도 포함될 가능성이 높습니다(대규모 프로젝트에서는 수백 개가 될 수 있음). 이는 프로젝트 업그레이드 도구가 모든 상황을 충족할 수 없기 때문입니다. 따라서 업그레이드 프로세스의 상당 부분이 수동으로 유지됩니다.
튜토리얼과 리소스
아래 목록은 Godot 4.0에서 일관성이나 명확성을 위해 단순히 이름이 변경된 노드를 나타냅니다. 프로젝트 업그레이드 도구는 스크립트에서 자동으로 이름을 바꿉니다.
주목할 만한 이름 변경 세트 중 하나는 3D 노드이며, 모두 2D 대응 항목과의 일관성을 위해 3D 접미사가 추가되었습니다. 예를 들어, Area는 이제 Area3D입니다.
쉽게 검색할 수 있도록 이 표에는 이전 이름에 3D 접미사를 추가하는 것만 포함된 리소스를 제외하고 이름이 바뀌고 자동으로 변환된 모든 노드 및 리소스가 나열되어 있습니다.
이전 이름(Godot 3.x) |
새 이름(Godot 4) |
|---|---|
애니메이션 |
애니메이션Sprite2D |
카메라 |
카메라 |
Control |
Control |
ARVR앵커 |
XRanchor3D |
ARVR인터페이스 |
Godot 인터페이스 |
ARVR오리진 |
XRorigin3D |
ARVR위치 추적기 |
XRPositionalTracker |
AR/VR 서버 |
Server |
모양 |
모양 |
평면 |
|
메시 |
메시 |
편집기 매뉴얼 |
EditorNode3DGizmo |
간단한 플러그인 만들기 |
EditorNode3DGizmo플러그인 |
타일맵 사용하기 |
복셀GI |
GIProbe데이터 |
복셀GI데이터 |
GradientTexture |
GradientTexture1D |
KinematicBody |
캐릭터바디3D |
KinematicBody2D |
캐릭터바디2D |
Light2D |
PointLight2D |
LineShape2D |
WorldBoundaryShape2D |
청취자 |
오디오리스너3D |
내비게이션 메시. |
내비게이션 |
내비게이션 |
내비게이션 |
내비게이션 |
내비게이션 |
파노라마하늘 |
키 |
Particles |
GPUParticles3D |
Particles2D |
GPUParticles2D |
입자재료 |
ParticleProcessMaterial |
Physics2DDirectBodyState |
PhysicsDirectBodyState2D |
Physics2DDirectSpaceState |
물리학DirectSpaceState2D |
물리 |
물리 |
Physics2DShapeQuery매개변수 |
PhysicsShapeQueryParameters2D |
Physics2DTestMotionResult |
물리테스트모션결과2D |
평면 |
세계경계모양3D |
gl_Position |
Marker2D |
gl_Position |
마커3D |
절차적 하늘. |
키 |
모양 |
분리RayShape3D |
모양 |
분리RayShape2D |
바로가기 |
바로가기 |
공간 |
노드 |
간단한 플러그인 만들기 |
Node3DGizmo |
킬러 기능 |
StandardMaterial3D |
스프라이트 |
스프라이트2D |
텍스처 |
압축 모드 |
텍스처 |
텍스처진행률 표시줄 |
VideoPlayer |
VideoStreamPlayer |
ViewportContainer |
SubViewportContainer |
Viewport |
SubViewport |
VisibilityEnabler |
VisibleOnScreenEnabler3D |
VisibilityNotifier |
VisibleOnScreenNotifier3D |
VisibilityNotifier2D |
VisibleOnScreenNotifier2D |
VisibilityNotifier3D |
VisibleOnScreenNotifier3D |
VisualServer |
렌더링 |
VisualShaderNodeScalarSmoothStep |
|
VisualShaderNodeVectorSmoothStep |
|
VisualShaderNodeVectorScalarSmoothStep |
|
VisualShaderNodeVectorScalarStep |
|
VisualShaderNodeScalarTransformMult |
|
VisualShaderNodeScalarDerivativeFunc |
|
VisualShaderNodeVectorDerivativeFunc |
|
VisualShaderNodeBoolean매개변수 |
|
VisualShaderNodeCubeMap매개변수 |
|
VisualShaderNodeTexture2D매개변수 |
|
VisualShaderNodeTextureUniformTriplanar |
VisualShaderNodeTextureParameterTriplanar |
클래스의 속성, 방법, 신호, 열거형 및 상수에 대한 설명을 제공합니다.
프로젝트 업그레이드 도구의 작동 방식으로 인해 모든 API 이름 바꾸기가 자동으로 수행될 수 있는 것은 아닙니다. 아래 목록에는 스크립트 편집기를 사용하여 수동으로 수행해야 하는 모든 이름 바꾸기가 포함되어 있습니다.
아래 목록에서 노드 또는 리소스를 찾을 수 없는 경우 위 표를 참조하여 새 이름을 찾으세요.
팁
스크립트 편집기가 열려 있는 동안 Ctrl + Shift + R을 눌러 파일에서 바꾸기 대화 상자를 사용하면 바꾸기 속도를 높일 수 있습니다. 그러나 파일에서 바꾸기 대화 상자는 바꾸기를 실행 취소할 수 있는 방법을 제공하지 않으므로 주의하십시오. 버전 제어를 사용하여 정기적으로 업그레이드 작업을 커밋합니다. 편집기의 파일에서 바꾸기 대화 상자보다 더 유연한 기능이 필요한 경우 sd과 같은 명령줄 도구를 사용할 수도 있습니다.
C#을 사용하는 경우 프로젝트에서 PascalCase 표기법을 사용하여 오래된 API 사용을 검색하고 PascalCase 표기법으로 교체를 수행해야 합니다.
메서드
파일 및 디렉토리 클래스는 완전히 다른 API를 갖는 FileAccess 및 DirAccess로 대체되었습니다. 이제 여러 메서드가 정적이므로 해당 클래스의 인스턴스를 만들지 않고도 FileAccess 또는 DirAccess에서 직접 호출할 수 있습니다.
OS 싱글톤(예:
OS.get_screen_size())의 화면 및 창 관련 메서드가 DisplayServer 싱글톤로 이동되었습니다. 대신DisplayServer.<object>_<get/set>_property()형식을 사용하도록 메소드 이름 지정도 변경되었습니다. 예를 들어,OS.get_screen_size()는DisplayServer.screen_get_size()가 됩니다.OS 싱글톤의 시간 및 날짜 방법이 Time 싱글톤로 이동되었습니다. (Time 싱글톤는 Godot 3.5 이상에서도 사용할 수 있습니다.)
일부
instance()호출을instantiate()로 바꿔야 할 수도 있습니다. 변환기는 이를 자동으로 처리해야 하지만 이는 사용자 정의 코드에 의존하며 100% 작동하지 않을 수 있습니다.AcceptDialog의
set_autowrap()는 이제set_autowrap_mode()입니다.AnimationNode의
process()는 이제_process()입니다(가상 메서드를 나타내는 선행 밑줄에 유의하세요).AnimationPlayer의 ``add_animation()``는 이제 ``add_animation_library()``이며 이제 :ref:`class_AnimationLibrary`를 사용합니다.
AnimationTree의 ``set_process_mode()``는 이제 ``set_process_callback()``입니다.
AStar2D 및 AStar3D의
get_points()는 이제get_points_id()입니다.BaseButton의
set_event()는 이제set_shortcut()입니다.Camera2D의 ``get_h_offset()``는 이제 ``get_drag_horizontal_offset()``입니다.
Camera2D의
get_v_offset()는 이제get_drag_vertical_offset()입니다.Camera2D의 ``set_h_offset()``는 이제 ``set_drag_horizontal_offset()``입니다.
Camera2D의
set_v_offset()는 이제set_drag_vertical_offset()입니다.CanvasItem의
update()는 이제queue_redraw()입니다.Control의 ``get_stylebox()``는 이제 ``get_theme_stylebox()``입니다.
Control의
set_tooltip()는 이제set_tooltip_text()입니다.EditorNode3DGizmoPlugin의
create_gizmo()는 이제_create_gizmo()입니다(가상 메서드를 나타내는 밑줄 앞에 표시됩니다).ENetMultiplayerPeer의
get_peer_port()는 이제get_peer()입니다.FileDialog의
get_mode()는 이제get_file_mode()입니다.FileDialog의
set_mode()는 이제set_file_mode()입니다.GraphNode의
get_offset()는 이제get_position_offset()입니다.GridMap의
map_to_world()는 이제map_to_local()입니다.GridMap의
world_to_map()는 이제local_to_map()입니다.이미지의
get_rect()는 이제get_region()입니다.ImmediateGeometry의
set_normal()는 이제surface_set_normal()입니다.ImmediateMesh의
set_color()는 이제surface_set_color()입니다.ImmediateMesh의
set_uv()는 이제surface_set_uv()입니다.ItemList의
get_v_scroll()는 이제get_v_scroll_bar()입니다.MultiPlayerAPI의
get_network_connected_peers()는 이제get_peers()입니다.MultiPlayerAPI의
get_network_peer()는 이제get_peer()입니다.MultiPlayerAPI의
get_network_unique_id()는 이제get_unique_id()입니다.MultiPlayerAPI의
has_network_peer()는 이제has_multiplayer_peer()입니다.MultiplayerAPI의
is_refusing_new_network_connections()는 이제is_refusing_new_connections()입니다.PacketPeerUDP의
is_listening()는 이제is_bound()입니다.PacketPeerUDP의
listen()는 이제bind()입니다.ParticleProcessMaterial의
set_flag()는 이제set_particle_flag()입니다.PhysicsTestMotionResult2D의
get_motion()는 이제get_travel()입니다.RenderingServer의
get_render_info()는 이제get_rendering_info()입니다.ResourceFormatLoader의
get_dependencies()는 이제_get_dependencies()입니다(가상 메서드를 나타내는 앞에 밑줄이 있음).ResourceFormatLoader의
load()는 이제_load()입니다.SceneTree의
change_scene()는 이제change_scene_to_file()입니다.바로가기의
is_valid()는 이제has_valid_event()로 변경되었습니다.TileMap의
map_to_world()는 이제map_to_local()입니다.TileMap의
world_to_map()는 이제local_to_map()입니다.Transform2D의
xform()는mat * vec이고xform_inv()는vec * mat입니다.XRPositionalTracker의
get_name()는 이제get_tracker_name()입니다.XRPositionalTracker의
get_type()는 이제get_tracker_type()입니다.XRPositionalTracker의
_set_name()는 이제get_tracker_name()입니다.
속성
참고
속성이 여기에 나열되어 있는 경우 프로젝트에서 사용되는 경우 관련 getter 및 setter 메서드의 이름도 수동으로 바꿔야 합니다. 예를 들어 PathFollow2D 및 PathFollow3D의 set_offset() 및 get_offset()는 각각 set_progress() 및 get_progress()로 이름을 바꿔야 합니다.
AudioServer의
device는 이제output_device입니다.BaseButton의
group는 이제button_group입니다.Camera3D의
zfar는 이제far입니다.Camera3D의
znear는 이제near입니다.Control의
margin는 이제offset입니다.InputEventMouseButton의
doubleclick는 이제double_click입니다.InputEventWithModifiers의
alt는 이제alt_pressed입니다.InputEventWithModifiers의
command는 이제command_pressed입니다.InputEventWithModifiers의
control는 이제ctrl_pressed입니다.InputEventWithModifiers의
meta는 이제meta_pressed입니다.InputEventWithModifiers의
shift는 이제shift_pressed입니다.레이블의
percent_visible는 이제visible_ratio입니다.MultiPlayerAPI의
refuse_new_network_connections는 이제refuse_new_connections입니다.노드의
filename는 이제scene_file_path입니다.PathFollow2D의
rotate는 이제rotates입니다.PathFollow2D 및 PathFollow3D의
offset는 이제progress입니다.RectangleShape2D의
extents는 이제size입니다.TextureProgressBar의
percent_visible는 이제show_percentage입니다.테마의
off는 이제unchecked입니다.테마의
ofs는 이제offset입니다.테마의
on는 이제checked입니다.Window의
window_title는 이제title입니다.WorldMarginShape2D의
d는 이제distance입니다.CSG 노드 및 VoxelGI의
extents속성은 설정된 값이 절반인size로 대체되어야 합니다(더 이상 절반 범위가 아니기 때문). 이는 또한 해당 setter/getter 메소드set_extents()및get_extents()에도 영향을 미칩니다.Engine.editor_hint속성은Engine.is_editor_hint()메서드로 대체되었습니다. 이 값은 읽기 전용이고, Godot는 읽기 전용 값에 속성을 사용하지 않기 때문입니다.
열거형
CPUParticles2D의
FLAG_MAX는 이제PARTICLE_FLAG_MAX입니다.
시그널
FileSystemDock의
instantiate는 이제instance입니다.CanvasItem의
hide는 이제hidden입니다. 이 이름 변경은hide()방법에는 적용되지 않고 시그널에만 적용됩니다.Tween의
tween_all_completed는 이제loop_finished입니다.EditorSettings의
changed는 이제settings_changed입니다.
상수
색상 이름은 이제 대문자이며 단어 사이에 밑줄을 사용합니다. 예를 들어,
Color.palegreen는 이제Color.PALE_GREEN입니다.MainLoop의
NOTIFICATION_상수는Node에 복제되었습니다. 즉, 참조할 때MainLoop.접두사를 제거할 수 있습니다.MainLoop의
NOTIFICATION_WM_QUIT_REQUEST는 이제NOTIFICATION_WM_CLOSE_REQUEST입니다.
프로젝트 설정 재정의하기
여러 프로젝트 설정의 이름이 바뀌었고 그 중 일부는 호환되지 않는 방식(예: 섀도우 필터 품질)으로 열거형이 변경되었습니다. 이는 일부 프로젝트 설정 값을 다시 설정해야 할 수도 있음을 의미합니다. 모든 프로젝트 설정을 볼 수 있도록 프로젝트 설정 대화 상자에서 고급 토글이 활성화되어 있는지 확인하세요.
환경 옵션
그래픽 품질 설정이 환경 속성에서 프로젝트 설정으로 이동되었습니다. 이는 현재 활성 환경 리소스에 액세스한 후 해당 속성을 수정하지 않고도 런타임 품질 조정을 더 쉽게 하기 위해 수행되었습니다.
결과적으로 이전 환경 품질 설정은 프로젝트 설정으로 자동 변환되지 않으므로 프로젝트 설정에서 환경 품질 설정을 구성해야 합니다.
Godot 3.x에서 환경 속성을 변경하는 그래픽 설정 메뉴가 있는 경우 환경 효과의 품질에 영향을 미치는 RenderingServer 메서드를 호출하도록 코드를 변경해야 합니다. 각 환경 효과의 "기본" 토글과 해당 시각적 노브만 환경 리소스 내에 유지됩니다.
셰이더 업데이트
업그레이드 도구에서 다루지 않는 셰이더에 대한 일부 변경 사항이 있습니다. 특히 셰이더가 좌표 공간 변환이나 사용자 정의 light() 기능을 사용하는 경우에는 일부 수동 변경이 필요합니다.
.shader 파일 확장자는 더 이상 지원되지 않습니다. 즉, .shader 파일의 이름을 .gdshader로 바꾸고 외부 텍스트 편집기를 사용하여 씬/resource 파일에서 그에 따라 참조를 업데이트해야 함을 의미합니다.
셰이더에서 수행해야 할 몇 가지 주목할만한 변경 사항은 다음과 같습니다.
텍스처 필터 및 반복 모드는 이제 텍스처 파일 자체가 아닌 개별 유니폼에 설정됩니다.
hint_albedo는 이제source_color입니다.hint_color는 이제source_color입니다.파티클 셰이더는 더 이상
vertex()프로세서 기능을 사용하지 않습니다. 대신start()및process()를 사용합니다.Forward+ 및 모바일 렌더러에서 정규화된 장치 좌표는 이제
[-1.0,1.0]대신[0.0,1.0]의 Z 범위를 갖습니다.SCREEN_UV및 깊이에서 NDC를 재구성하는 경우vec3 ndc = vec3(SCREEN_UV, depth) * 2.0 - 1.0;대신vec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, depth);를 사용하세요. 호환성 렌더러는 3.x와 동일한 NDC Z 범위를 사용하여 변경되지 않았습니다.조명 모델이 변경되었습니다. 셰이더에 사용자 정의
light()기능이 있는 경우 동일한 시각적 결과를 얻으려면 변경해야 할 수도 있습니다.4.3 이상에서는 이제 역방향 Z 깊이 버퍼 기술이 구현되어 고급 셰이더가 중단될 수 있습니다. Reverse Z 소개(셰이더를 깨뜨려 죄송합니다)를 참조하세요.
자세한 정보는 음영 언어를 참조하세요.
같은 Godot 웹사이트 페이지에서 참고하세요.
이전 버전과 호환되지 않는 변경 사항을 고려하도록 스크립트 업데이트
Godot 3.x와 4 사이에 수행된 일부 변경 사항은 이름 변경이 아니지만, 다른 기본 동작으로 인해 이전 버전과의 호환성이 여전히 손상됩니다.
이에 대한 가장 주목할만한 예는 다음과 같습니다.
_ready()및_process()와 같은 수명 주기 함수는 더 이상 동일한 이름을 가진 상위 클래스의 함수를 암시적으로 호출하지 않습니다. 대신, 상위 클래스 함수가 먼저 호출되도록 하위 클래스의 수명주기 함수 상단에super()를 사용해야 합니다.String 및 StringName는 이제 모두 GDScript에 노출됩니다. StringName은 한 번 생성되어 여러 번 재사용되는 "상수" 문자열에 사용되도록 특별히 설계되었으므로 더 큰 최적화가 가능합니다. 이러한 유형은 서로 엄밀히 동일하지 않습니다. 즉,
is_same("example", &"example")는false를 반환합니다. 대부분의 경우 서로 바꿔 사용할 수 있지만("example" == &"example"는true를 반환함) 때로는"example"를&"example"로 바꿔야 할 수도 있습니다.GDScript setter 및 getter 구문이 변경되었지만 변환 도구에 의해 부분적으로만 변환되었습니다. 대부분의 경우 setter와 getter가 다시 작동하도록 하려면 수동으로 변경해야 합니다.
GDScript 시그널 연결 구문이 변경되었습니다. 변환 도구는 Godot 4에 여전히 존재하는 문자열 기반 구문을 사용하지만 링크된 페이지에 설명된 Signal 기반 구문으로 전환하는 것이 좋습니다. 이렇게 하면 문자열이 더 이상 관련되지 않으므로 런타임에만 발견될 수 있는 시그널 이름 오류 문제가 방지됩니다.
tool 스크립트인 내장 스크립트는
tool키워드를@tool주석으로 변환하지 않습니다.Tween 노드는 Godot 3.5 이상에서도 사용할 수 있는 Tweener를 위해 제거되었습니다. 자세한 내용은 원본 풀 요청을 참조하세요.
randomize()is now automatically called on project load, so deterministic randomness with the global RandomNumberGenerator instance requires manually setting a seed in a script's_ready()function.call_group(),set_group()및notify_group()는 이제 기본적으로 즉시 실행됩니다. 비용이 많이 드는 함수를 호출하는 경우 노드가 많이 포함된 그룹에서 사용하면 끊김 현상이 발생할 수 있습니다. 이전과 같이 지연된 호출을 사용하려면call_group(...)를call_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)로 바꾸십시오(그리고 각각set_group()및notify_group()와 동일하게 수행).rotation_degrees대신rotation속성이 편집기에 노출되며 이는 자동으로 인스펙터 독에 각도로 표시됩니다. 변환 도구에서 변환이 자동으로 처리되지 않으므로 애니메이션이 중단될 수 있습니다.AABB의
has_no_surface()가 반전되어has_surface()로 이름이 변경되었습니다.AnimatedTexture의
fps속성은speed_scale로 대체되었으며, 이는 AnimationPlayer의playback_speed속성과 동일하게 작동합니다.AnimatedSprite2D 및 AnimatedSprite3D는 이제 음수
speed_scale값을 허용합니다. 내부적으로0.0에 고정된speed_scale에 의존하는 경우 애니메이션이 중단될 수 있습니다.AnimatedSprite2D 및 AnimatedSprite3D의
playing속성이 제거되었습니다. 대신play()/stop()방법을 사용하거나 SpriteFrames 하단 패널을 통해autoplay애니메이션을 구성합니다(그러나 동시에 둘 다는 아님).Array의
slice()두 번째 매개변수(end)는 이제 포괄적이 아닌 배타적입니다. 예를 들어 이는[1, 2, 3].slice(0, 1)가 이제[1, 2]대신[1]를 반환한다는 의미입니다.BaseButton의 시그널는 이제
button_up및button_down입니다.pressed속성은 이제button_pressed입니다.Camera2D의
rotating속성은 동작이 반전된ignore_rotation로 대체되었습니다.Camera2D의
zoom속성이 반전되었습니다. 이제 더 높은 값이 더 작아지는 대신 더 많이 확대됩니다.Node의
remove_and_skip()메서드가 제거되었습니다. 스크립트에서 다시 구현해야 하는 경우 이전 C++ 구현을 참조로 사용할 수 있습니다.OS.get_system_time_secs()는Time.get_time_dict_from_system()["second"]로 변환되어야 합니다.ResourceSaver의
save()메서드에는 이제 인수가 바뀌었습니다(resource: Resource, path: String). 이는 ResourceFormatSaver의_save()방법에도 적용됩니다.StreamPeerTCP는
get_status()자동 폴링에 의존하는 대신 상태를 업데이트하기 위해poll()를 호출해야 합니다. GH-59582String의
right()메서드 동작이 변경되었습니다: 이제 지정된 위치에서 문자열 오른쪽이 아닌 문자열 오른쪽에서 여러 문자를 반환합니다. 이전 동작이 필요한 경우 대신substr()를 사용할 수 있습니다.is_connected_to_host()는 GH-59582에 따라 StreamPeerTCP 및 PacketPeerUDP에서 제거되었습니다. 대신get_status()를 StreamPeerTCP에서 사용할 수 있습니다. 대신is_socket_connected()를 PacketPeerUDP에서 사용할 수 있습니다._get_property_list()에서or_lesser속성 힌트 문자열은 이제or_less입니다._get_property_list()에서noslider속성 힌트 문자열은 이제no_slider입니다.VisualShaderNodeVec4Parameter는 이제 Quaternion 대신 Vector4를 매개변수로 사용합니다.
노드/리소스 제거 또는 교체됨
여기에는 다른 구성이 필요한 다른 노드로 교체된 모든 노드가 나열됩니다. 프로젝트 변환기는 기존 설정 업데이트를 지원하지 않으므로 설정을 처음부터 다시 수행해야 합니다.
제거된 노드 |
컷 아웃(Cutout) 애니메이션 |
주석 |
|---|---|---|
AnimationPlayer |
애니메이션 |
AnimationTreePlayer는 Godot 3.1부터 더 이상 사용되지 않습니다. |
구워진 라이트맵 |
라이트맵GI |
|
구워진 라이트맵 |
라이트맵GI데이터 |
|
비트맵글꼴 |
파일 필터 |
|
동적 언어: |
파일 필터 |
|
동적 성질 |
파일 필터 |
|
ClippedCamera |
Camera2D 또는 Camera3D |
Camera's pyramid shape was moved to Camera3D. |
보간 |
Camera2D 또는 Camera3D |
|
내비게이션 |
Node2D |
other 2D 탐색 노드으로 대체되었습니다. |
내비게이션 |
노드 |
other 3D Navigation 노드으로 대체되었습니다. |
OpenSimplexNoise |
FastNoiseLite |
다양한 매개변수와 셀룰러와 같은 더 많은 노이즈 유형이 있습니다. FastNoiseLite 라이브러리에는 4D 노이즈가 없으므로 지원되지 않습니다. |
버튼(Button). |
버튼(Button). |
ToolButton은 기본적으로 Flat 속성이 활성화된 Button이었습니다. |
Y정렬 |
Flow Control(흐름 제어) |
CanvasItem에는 4.0의 새로운 Y 정렬 활성화 속성이 있습니다. |
근접 그룹 |
노드 |
VisibleOnScreenNotifier3D가 대체 역할을 할 수 있습니다. |
포트(Ports) |
노드 |
포털 및 공간 폐색 컬링은 래스터 occlusion 컬링 (OccluderInstance3D 노드)으로 대체되었으며, 이를 위해서는 다른 설정 프로세스가 필요합니다. |
방 |
노드 |
|
프로젝트 매니저(Project Manager) |
노드 |
|
그룹 |
노드 |
|
어클루전 모드 |
노드 |
지오메트리 오클루전 컬링은 래스터 occlusion 컬링(OccluderInstance3D 노드)으로 대체되었으며, 이를 위해서는 다른 설정 프로세스가 필요합니다. |
OccluderShapeSphere |
리소스 |
이전 프로젝트를 로드하는 경우 노드는 자동으로 가장 가까운 근사치로 대체됩니다(프로젝트 업그레이드 도구를 사용하지 않는 경우에도).
테마:
Threading API가 4.0에서 변경되었습니다. 예를 들어, Godot 3.x의 다음 코드 조각은 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()는 더 이상 사용되지 않으며 Thread.is_alive()로 변환해야 합니다.
더 보기
Godot 3.x와 4 사이의 전체 변경 사항 목록은 changelog을 참조하세요.
ArrayMesh 리소스 호환성 손상
ArrayMesh 리소스를 .res 또는 .tres 파일에 저장한 경우 4.0에서 사용되는 형식은 3.x에서 사용되는 형식과 호환되지 않습니다. 소스 메시 파일을 가져와 다시 ArrayMesh 리소스로 저장하는 과정을 거쳐야 합니다.
자동으로 이름이 변경된 메서드, 속성, 시그널 및 상수 목록
editor/renames_map_3_to_4.cpp 소스 파일에는 프로젝트 업그레이드 도구에서 수행되는 자동 이름 바꾸기가 모두 나열되어 있습니다. 주석 처리된 줄은 자동으로 수행할 수 없는 API 이름 변경을 나타냅니다.
편집기 설정 포팅하기
Godot 3.x와 4.0은 다른 편집기 설정 파일을 사용합니다. 즉, 설정을 서로 독립적으로 변경할 수 있습니다.
Godot 3.x 설정을 Godot 4로 포팅하려면 editor 설정 폴더를 열고 Godot 4 편집기가 닫혀 있는 동안 editor_settings-3.tres를 editor_settings-4.tres로 복사하세요.
참고
Godot 3.x 이후로 많은 설정의 이름과 카테고리가 변경되었습니다. 이름이나 카테고리가 변경된 편집기 설정은 Godot 4.0으로 이전되지 않습니다. 해당 값을 다시 설정해야 합니다.
버전 제어 설정 업데이트하기
Godot 3.x와 4.x에는 version control system에서 무시해야 하는 완전히 다른 파일 및 폴더 목록이 있습니다.