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에서는 :ref:`지원 기간 <doc_release_policy>`이 더 길어집니다. 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의 바이너리 크기가 더 큽니다. :ref:`크기에 맞게 빌드 최적화 <doc_optimizing_for_size>`를 통해 이 문제를 완화할 수 있지만, 특정 활성화된 모듈 세트가 포함된 4.0 빌드는 동일한 모듈이 포함된 3.x 빌드에 비해 더 큰 상태로 유지됩니다. 이는 :ref:`웹 <doc_exporting_for_web>`으로 내보내기에 문제가 될 수 있습니다. 바이너리 크기는 다운로드 속도에 관계없이 엔진이 초기화되는 속도에 직접적인 영향을 미치기 때문입니다.
Godot 4는 GLES2 렌더링을 지원하지 않으며 앞으로도 지원하지 않을 것입니다. (새로운 호환성 렌더러를 사용하는 GLES3 렌더링은 여전히 지원됩니다. 이는 Vulkan을 지원하지 않는 장치에서도 여전히 Godot 4를 실행할 수 있음을 의미합니다.)
Intel Sandy Bridge(2세대) 통합 그래픽과 같은 매우 오래된 하드웨어를 대상으로 하는 경우 업그레이드 후 해당 하드웨어에서 프로젝트가 실행되지 않습니다. `소프트웨어 OpenGL 구현 <https://github.com/pal1000/mesa-dist-win>`__을 사용하면 이 제한을 우회할 수 있지만 게임을 하기에는 너무 느립니다.
업그레이드 주의사항
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**는 변환 도구가 실패하는 경우 만 고급 사용 사례에 사용하기 위한 것입니다.
프로젝트 변환 프로세스가 완료될 때까지 기다리십시오. 장면이 많은 대규모 프로젝트의 경우 최대 몇 분이 걸릴 수 있습니다.
프로젝트 관리자 인터페이스를 다시 사용할 수 있게 되면 프로젝트를 두 번 클릭하여(또는 프로젝트를 선택한 다음 편집 선택) 편집기에서 엽니다.
일부 프로젝트 파일이 너무 크거나 길어서 변환 문제가 발생한 경우 명령줄을 사용하여 프로젝트를 업그레이드할 수 있습니다(아래 참조). 이렇게 하면 변환기의 크기 제한을 무시할 수 있습니다.
명령줄에서 내보내기
:ref:`명령줄 <doc_command_line_tutorial>`에서 프로젝트 업그레이드 도구를 사용하려면 다음 인수를 사용하여 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 이름 바꾸기가 자동으로 수행될 수 있는 것은 아닙니다. 아래 목록에는 스크립트 편집기를 사용하여 수동으로 수행해야 하는 모든 이름 바꾸기가 포함되어 있습니다.
아래 목록에서 노드 또는 리소스를 찾을 수 없는 경우 위 표를 참조하여 새 이름을 찾으세요.
팁
스크립트 편집기가 열려 있는 동안 :kbd:`Ctrl + Shift + R`을 눌러 파일에서 바꾸기 대화 상자를 사용하면 바꾸기 속도를 높일 수 있습니다. 그러나 파일에서 바꾸기 대화 상자는 바꾸기를 실행 취소할 수 있는 방법을 제공하지 않으므로 주의하십시오. 버전 제어를 사용하여 정기적으로 업그레이드 작업을 커밋합니다. 편집기의 파일에서 바꾸기 대화 상자보다 더 유연한 기능이 필요한 경우 `sd <https://github.com/chmln/sd>`__과 같은 명령줄 도구를 사용할 수도 있습니다.
C#을 사용하는 경우 프로젝트에서 PascalCase 표기법을 사용하여 오래된 API 사용을 검색하고 PascalCase 표기법으로 교체를 수행해야 합니다.
메서드
파일 및 디렉토리 클래스는 완전히 다른 API를 갖는 FileAccess 및 :ref:`class_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% of 상황에서 작동하지 않을 수 있는 사용자 정의 코드에 의존합니다.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()``입니다.
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()``입니다.
Control의 ``get_stylebox()``는 이제 ``get_theme_stylebox()``입니다.
EditorNode3DGizmoPlugin의 ``create_gizmo()``는 이제 ``_create_gizmo()``입니다(가상 메서드를 나타내는 밑줄 앞에 표시됩니다).
ENetMultiplayerPeer의 ``get_peer_port()``는 이제 ``get_peer()``입니다.
GraphNode의 ``get_offset()``는 이제 ``get_position_offset()``입니다.
ImmediateGeometry의 ``set_normal()``는 이제 ``surface_set_normal()``입니다.
ImmediateMesh의 ``set_color()``는 이제 ``surface_set_color()``입니다.
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()``입니다.
ParticleProcessMaterial의 ``set_flag()``는 이제 ``set_particle_flag()``입니다.
PhysicsTestMotionResult2D의 ``get_motion()``는 이제 ``get_travel()``입니다.
RenderingServer의 ``get_render_info()``는 이제 ``get_rendering_info()``입니다.
ResourceFormatLoader의 ``get_dependencies()``는 이제 ``_get_dependencies()``입니다(가상 메서드를 나타내는 앞에 밑줄이 있음).
SceneTree의 ``change_scene()``는 이제 ``change_scene_to_file()``입니다.
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()``로 이름을 바꿔야 합니다.
InputEventMouseButton의 ``doubleclick``는 이제 ``double_click``입니다.
InputEventWithModifiers의 ``command``는 이제 ``command_pressed``입니다.
InputEventWithModifiers의 ``control``는 이제 ``ctrl_pressed``입니다.
InputEventWithModifiers의 ``shift``는 이제 ``shift_pressed``입니다.
MultiPlayerAPI의 ``refuse_new_network_connections``는 이제 ``refuse_new_connections``입니다.
PathFollow2D 및 PathFollow3D의 ``offset``는 이제 ``progress``입니다.
TextureProgressBar의 ``percent_visible``는 이제 ``show_percentage``입니다.
CSG 노드 및 VoxelGI의
extents속성은 설정된 값이 절반인size``로 대체되어야 합니다(더 이상 절반 범위가 아니기 때문). 이는 또한 해당 setter/getter 메소드 ``set_extents()및 ``get_extents()``에도 영향을 미칩니다.Engine.editor_hint속성은Engine.is_editor_hint()*방법*을 위해 제거되었습니다. 이는 읽기 전용이고 Godot의 속성은 읽기 전용 값에 사용되지 않기 때문입니다.
열거형
시그널
CanvasItem의
hide``는 이제 ``hidden``입니다. 이 이름 변경은 ``hide()방법에는 적용되지 않고 시그널에만 적용됩니다.
상수
프로젝트 설정 재정의하기
여러 프로젝트 설정의 이름이 바뀌었고 그 중 일부는 호환되지 않는 방식(예: 섀도우 필터 품질)으로 열거형이 변경되었습니다. 이는 일부 프로젝트 설정 값을 다시 설정해야 할 수도 있음을 의미합니다. 모든 프로젝트 설정을 볼 수 있도록 프로젝트 설정 대화 상자에서 고급 토글이 활성화되어 있는지 확인하세요.
환경 옵션
그래픽 품질 설정이 환경 속성에서 프로젝트 설정으로 이동되었습니다. 이는 현재 활성 환경 리소스에 액세스한 후 해당 속성을 수정하지 않고도 런타임 품질 조정을 더 쉽게 하기 위해 수행되었습니다.
결과적으로 이전 환경 품질 설정은 프로젝트 설정으로 자동 변환되지 않으므로 프로젝트 설정에서 환경 품질 설정을 구성해야 합니다.
Godot 3.x에서 환경 속성을 변경하는 그래픽 설정 메뉴가 있는 경우 환경 효과의 품질에 영향을 미치는 RenderingServer 메서드를 호출하도록 코드를 변경해야 합니다. 각 환경 효과의 "기본" 토글과 해당 시각적 노브만 환경 리소스 내에 유지됩니다.
셰이더 업데이트
업그레이드 도구에서 다루지 않는 셰이더에 대한 일부 변경 사항이 있습니다. 특히 셰이더가 좌표 공간 변환이나 사용자 정의 light() 기능을 사용하는 경우에는 일부 수동 변경이 필요합니다.
.shader 파일 확장자는 더 이상 지원되지 않습니다. 즉, .shader 파일의 이름을 ``.gdshader``로 바꾸고 외부 텍스트 편집기를 사용하여 씬/resource 파일에서 그에 따라 참조를 업데이트해야 함을 의미합니다.
셰이더에서 수행해야 할 몇 가지 주목할만한 변경 사항은 다음과 같습니다.
텍스처 필터 및 반복 모드는 이제 텍스처 파일 자체가 아닌 개별 유니폼에 설정됩니다.
입자 셰이더는 더 이상
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 소개(셰이더를 깨뜨려 죄송합니다) <https://godotengine.org/article/introducing-reverse-z/>`__를 참조하세요.
자세한 정보는 음영 언어를 참조하세요.
같은 Godot 웹사이트 페이지에서 참고하세요.
이전 버전과 호환되지 않는 변경 사항을 고려하도록 스크립트 업데이트
Godot 3.x와 4 사이에 수행된 일부 변경 사항은 이름 변경이 아니지만, 다른 기본 동작으로 인해 이전 버전과의 호환성이 여전히 손상됩니다.
이에 대한 가장 주목할만한 예는 다음과 같습니다.
_ready()및 ``_process()``와 같은 수명 주기 함수는 더 이상 동일한 이름을 가진 상위 클래스의 함수를 암시적으로 호출하지 않습니다. 대신, 상위 클래스 함수가 먼저 호출되도록 하위 클래스의 수명주기 함수 상단에 ``super()``를 사용해야 합니다.String 및 class_StringName`는 이제 모두 GDScript에 노출됩니다. StringName은 한 번 생성되어 여러 번 재사용되는 "상수" 문자열에 사용되도록 특별히 설계되었으므로 더 큰 최적화가 가능합니다. 이러한 유형은 서로 엄밀히 동일하지 않습니다. 즉, ``is_same("example", &"example")``는 ``false``를 반환합니다. 대부분의 경우 서로 바꿔 사용할 수 있지만(`"example" == &"example"``는 ``true``를 반환함) 때로는 ``"example"``를 ``&"example"``로 바꿔야 할 수도 있습니다.
:ref:`GDScript setter 및 getter 구문 <doc_gdscript_basics_setters_getters>`이 변경되었지만 변환 도구에 의해 부분적으로만 변환되었습니다. 대부분의 경우 setter와 getter가 다시 작동하도록 하려면 수동으로 변경해야 합니다.
GDScript 시그널 연결 구문 <doc_gdscript_signals>`이 변경되었습니다. 변환 도구는 Godot 4에 여전히 존재하는 문자열 기반 구문을 사용하지만 링크된 페이지에 설명된 :ref:`class_Signal 기반 구문으로 전환하는 것이 좋습니다. 이렇게 하면 문자열이 더 이상 관련되지 않으므로 런타임에만 발견될 수 있는 시그널 이름 오류 문제가 방지됩니다.
tool 스크립트 <doc_running_code_in_the_editor>`인 내장 스크립트는 ``tool` 키워드를
@tool주석으로 변환하지 않습니다.Tween 노드는 Godot 3.5 이상에서도 사용할 수 있는 Tweener를 위해 제거되었습니다. 자세한 내용은 `원본 풀 요청 <https://github.com/godotengine/godot/pull/41794>`__을 참조하세요.
randomize()``는 이제 프로젝트 로드 시 자동으로 호출되므로 전역 RandomNumberGenerate 인스턴스의 결정론적 무작위성을 위해서는 스크립트의 ``_ready()함수에서 시드를 수동으로 설정해야 합니다.call_group(),set_group()및notify_group()``는 이제 기본적으로 즉시 실행됩니다. 비용이 많이 드는 함수를 호출하는 경우 노드가 많이 포함된 그룹에서 사용하면 끊김 현상이 발생할 수 있습니다. 이전과 같이 지연된 호출을 사용하려면 ``call_group(...)``를 ``call_group_flags(SceneTree.GROUP_CALL_DEFERRED, ...)``로 바꾸십시오(그리고 각각 ``set_group()및 ``notify_group()``와 동일하게 수행).rotation_degrees대신rotation속성이 편집기에 노출되며 이는 자동으로 인스펙터 독에 각도로 표시됩니다. 변환 도구에서 변환이 자동으로 처리되지 않으므로 애니메이션이 중단될 수 있습니다.:ref:`class_AABB`의 ``has_no_surface()``가 반전되어 ``has_surface()``로 이름이 변경되었습니다.
AABB 및 :ref:`class_Rect2`의 ``has_no_area()``가 반전되어 ``has_area()``로 이름이 변경되었습니다.
class_AnimatedTexture`의 ``fps` 속성은
speed_scale``로 대체되었으며, 이는 AnimationPlayer의 ``playback_speed속성과 동일하게 작동합니다.AnimatedSprite2D 및 class_AnimatedSprite3D`는 이제 음수 ``speed_scale` 값을 허용합니다. 내부적으로 ``0.0``에 고정된 ``speed_scale``에 의존하는 경우 애니메이션이 중단될 수 있습니다.
AnimatedSprite2D 및 class_AnimatedSprite3D`의 ``playing` 속성이 제거되었습니다. 대신
play()/stop()방법을 사용하거나 SpriteFrames 하단 패널을 통해autoplay애니메이션을 구성합니다(그러나 동시에 둘 다는 아님).class_Array`의 ``slice()` 두 번째 매개변수(
end)는 이제 포괄적이 아닌 *배타적*입니다. 예를 들어 이는[1, 2, 3].slice(0, 1)``가 이제 ``[1, 2]대신 ``[1]``를 반환한다는 의미입니다.class_BaseButton`의 시그널는 이제 ``button_up` 및
button_down``입니다. ``pressed속성은 이제 ``button_pressed``입니다.class_Camera2D`의 ``rotating` 속성은 동작이 반전된 ``ignore_rotation``로 대체되었습니다.
Camera2D의
zoom속성이 반전되었습니다. 이제 더 높은 값이 더 작아지는 대신 더 많이 확대됩니다.class_Node`의 ``remove_and_skip()` 메서드가 제거되었습니다. 스크립트에서 다시 구현해야 하는 경우 `이전 C++ 구현 <https://github.com/godotengine/godot/blob/7936b3cc4c657e4b273b376068f095e1e0e4d82a/scene/main/node.cpp#L1910-L1945>`__을 참조로 사용할 수 있습니다.
``OS.get_system_time_secs()``는 ``Time.get_time_dict_from_system()["second"]``로 변환되어야 합니다.
class_ResourceSaver`의 ``save()` 메서드에는 이제 인수가 바뀌었습니다(
resource: Resource, path: String). 이는 class_ResourceFormatSaver`의 ``_save()` 방법에도 적용됩니다.class_StreamPeerTCP`는 ``get_status()` 자동 폴링에 의존하는 대신 상태를 업데이트하기 위해 ``poll()``를 호출해야 합니다. GH-59582
class_String`의 ``right()` 메서드 동작이 변경되었습니다: 이제 지정된 위치에서 문자열 오른쪽이 아닌 문자열 오른쪽에서 여러 문자를 반환합니다. 이전 동작이 필요한 경우 대신 ``substr()``를 사용할 수 있습니다.
``is_connected_to_host()``는 `GH-59582 <https://github.com/godotengine/godot/pull/59582>`__에 따라 StreamPeerTCP 및 PacketPeerUDP에서 제거되었습니다. 대신 ``get_status()``를 StreamPeerTCP에서 사용할 수 있습니다. 대신 ``is_socket_connected()``를 :ref:`class_PacketPeerUDP`에서 사용할 수 있습니다.
_get_property_list()``에서 ``or_lesser속성 힌트 문자열은 이제 ``or_less``입니다._get_property_list()``에서 ``noslider속성 힌트 문자열은 이제 ``no_slider``입니다.VisualShaderNodeVec4Parameter는 이제 Quaternion 대신 :ref:`class_Vector4`를 매개변수로 사용합니다.
노드/리소스 제거 또는 교체됨
여기에는 다른 구성이 필요한 다른 노드로 교체된 모든 노드가 나열됩니다. 프로젝트 변환기는 기존 설정 업데이트를 지원하지 않으므로 설정을 처음부터 다시 수행해야 합니다.
제거된 노드 |
컷 아웃(Cutout) 애니메이션 |
주석 |
|---|---|---|
AnimationPlayer |
애니메이션 |
AnimationTreePlayer는 Godot 3.1부터 더 이상 사용되지 않습니다. |
구워진 라이트맵 |
라이트맵GI |
|
구워진 라이트맵 |
라이트맵GI데이터 |
|
비트맵글꼴 |
파일 필터 |
|
동적 언어: |
파일 필터 |
|
동적 성질 |
파일 필터 |
|
ClippedCamera |
Camera2D 또는 Camera3D |
카메라의 피라미드 모양이 :ref:'class_Camera3D'로 이동되었습니다. |
보간 |
Camera2D 또는 Camera3D |
|
내비게이션 |
Node2D |
:ref:`other 2D 탐색 노드 <doc_navigation_overview_2d>`으로 대체되었습니다. |
내비게이션 |
노드 |
:ref:`other 3D Navigation 노드 <doc_navigation_overview_3d>`으로 대체되었습니다. |
OpenSimplexNoise |
FastNoiseLite |
다양한 매개변수와 셀룰러와 같은 더 많은 노이즈 유형이 있습니다. FastNoiseLite 라이브러리에는 4D 노이즈가 없으므로 지원되지 않습니다. |
버튼(Button). |
버튼(Button). |
ToolButton은 기본적으로 Flat 속성이 활성화된 Button이었습니다. |
Y정렬 |
Flow Control(흐름 제어) |
CanvasItem에는 4.0의 새로운 Y 정렬 활성화 속성이 있습니다. |
근접 그룹 |
노드 |
:ref:`class_VisibleOnScreenNotifier3D`가 대체 역할을 할 수 있습니다. |
포트(Ports) |
노드 |
포털 및 공간 폐색 컬링은 래스터 :ref:`occlusion 컬링 <doc_occlusion_culling>`(OccluderInstance3D 노드)으로 대체되었으며, 이를 위해서는 다른 설정 프로세스가 필요합니다. |
방 |
노드 |
|
프로젝트 매니저(Project Manager) |
노드 |
|
그룹 |
노드 |
|
어클루전 모드 |
노드 |
지오메트리 오클루전 컬링은 래스터 :ref:`occlusion 컬링 <doc_occlusion_culling>`(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 <https://github.com/godotengine/godot/blob/master/CHANGELOG.md>`__을 참조하세요.
ArrayMesh 리소스 호환성 손상
ArrayMesh 리소스를 .res 또는 .tres 파일에 저장한 경우 4.0에서 사용되는 형식은 3.x에서 사용되는 형식과 호환되지 않습니다. 소스 메시 파일을 가져와 다시 ArrayMesh 리소스로 저장하는 과정을 거쳐야 합니다.
자동으로 이름이 변경된 메서드, 속성, 시그널 및 상수 목록
The editor/project_upgrade/renames_map_3_to_4.cpp source file lists all automatic renames performed by the project upgrade tool. Lines that are commented out refer to API renames that cannot be performed automatically.
편집기 설정 포팅하기
Godot 3.x와 4.0은 다른 편집기 설정 파일을 사용합니다. 즉, 설정을 서로 독립적으로 변경할 수 있습니다.
Godot 3.x 설정을 Godot 4로 포팅하려면 :ref:`editor 설정 폴더 <doc_data_paths_editor_data_paths>`를 열고 Godot 4 편집기가 닫혀 있는 동안 ``editor_settings-3.tres``를 ``editor_settings-4.tres``로 복사하세요.
참고
Godot 3.x 이후로 많은 설정의 이름과 카테고리가 변경되었습니다. 이름이나 카테고리가 변경된 편집기 설정은 Godot 4.0으로 이전되지 않습니다. 해당 값을 다시 설정해야 합니다.
버전 제어 설정 업데이트하기
Godot 3.x와 4.x에는 :ref:`version control system<doc_version_control_systems>`에서 무시해야 하는 완전히 다른 파일 및 폴더 목록이 있습니다.