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...
플랫폼 지원
:ref:`doc_custom_modules_in_cpp`와 유사하게 Godot의 다중 플랫폼 아키텍처는 기존 소스 코드를 수정하지 않고 플랫폼 포트를 생성할 수 있는 방식으로 설계되었습니다.
엔진과 독립적으로 배포되는 사용자 정의 플랫폼 포트의 예는 단일 보드 컴퓨터를 대상으로 하는 FRT <https://github.com/efornara/frt>`__입니다. 이 플랫폼 포트는 현재 Godot 3.x를 대상으로 합니다. 따라서 Godot 4의 새로운 :ref:`class_DisplayServer 추상화를 사용하지 않습니다.
사용자 정의 플랫폼 포트를 생성하는 몇 가지 이유는 다음과 같습니다.
게임을 콘솔로 이식하고 싶지만(콘솔 지원에 대한 Godot 웹사이트 참조) 플랫폼 레이어를 직접 작성하고 싶습니다. 이는 콘솔 제조업체와 NDA에 서명해야 하기 때문에 길고 힘든 프로세스이지만 이를 통해 콘솔 포팅 프로세스를 완전히 제어할 수 있습니다.
현재 지원되지 않는 이국적인 플랫폼에 Godot를 이식하고 싶습니다.
사용자 정의 플랫폼 포트 생성에 대한 질문이 있는 경우 Godot 기여자 채팅 <https://chat.godotengine.org/channel/platforms>`__의 ``#platforms` 채널에 문의하세요.
참고
Godot는 현대적인 요구 사항을 갖춘 현대적인 엔진입니다. 대상 플랫폼에서 간단한 2D 프로젝트만 실행하려는 경우에도 여전히 많은 양의 메모리가 필요하므로 대부분의 레트로 콘솔에서 실행할 수 없습니다. 참고로 Godot 4에서는 아무것도 보이지 않는 빈 프로젝트를 Linux에서 실행하려면 약 100MB의 RAM이 필요합니다(헤드리스 모드에서는 50MB).
메모리가 많이 제한된 플랫폼에서 Godot를 실행하려는 경우, 이전 Godot 버전은 메모리 요구 사항이 더 낮습니다. class_DisplayServer`가 :ref:`class_OS 싱글톤에서 분할되지 않는다는 점을 제외하면 포팅 프로세스는 유사합니다.
공식 Git 플러그인
공식 플랫폼 포트는 사용자 정의 플랫폼 포트를 생성할 때 참조로 사용할 수 있습니다.
플랫폼 코드는 일반적으로 자체 포함되어 있지만 이 규칙에는 예외가 있습니다. 예를 들어, 여러 플랫폼에서 공유되는 오디오 드라이버와 렌더링 드라이버는 Godot 소스 코드의 `drivers/ 폴더 <https://github.com/godotengine/godot/tree/master/drivers>`__에 있습니다.
커스텀 노드 생성하기
사용자 정의 플랫폼 포트를 생성하는 것은 플랫폼의 SDK에 대한 사전 지식이 필요한 대규모 작업입니다. 필요한 기능에 따라 필요한 작업량이 달라집니다.
플랫폼 포트의 필수 기능
최소한 플랫폼 포트에는 헤드리스 작업에 구축하고 사용할 수 있도록 구현된 OS 싱글톤의 메서드가 있어야 합니다. ``logo.svg``(32×32) 벡터 이미지도 플랫폼 폴더 내에 있어야 합니다. 이 로고는 해당 플랫폼을 대상으로 하는 각 내보내기 사전 설정의 내보내기 대화 상자에 표시됩니다.
예를 들어 Linux/*BSD 플랫폼에 대한 `이 구현 <https://github.com/godotengine/godot/blob/master/platform/linuxbsd/os_linuxbsd.cpp>`__을 참조하세요. 참조를 위해 `OS 싱글톤 헤더 <https://github.com/godotengine/godot/blob/master/core/os/os.h>`__도 참조하세요.
참고
대상 플랫폼이 UNIX와 유사한 경우 OS_Unix 클래스에서 상속하여 많은 작업을 자동으로 수행하는 것을 고려하십시오.
텍스처 필터링:
모든 메소드가 구현된 플랫폼 폴더 내에 detect.py 파일을 생성해야 합니다. 이 파일은 SCons가 플랫폼을 컴파일을 위한 유효한 옵션으로 감지하는 데 필요합니다. 예를 들어 Linux/*BSD 플랫폼에 대한 `Detect.py 파일 <https://github.com/godotengine/godot/blob/master/platform/linuxbsd/detect.py>`__을 참조하세요.
모든 방법은 다음과 같이 detect.py 내에서 구현되어야 합니다.
is_active(): 플랫폼 빌드를 일시적으로 비활성화하는 데 사용할 수 있습니다. 일반적으로 항상 ``True``를 반환해야 합니다.get_name(): 플랫폼의 사용자에게 표시되는 이름을 문자열로 반환합니다.can_build(): 호스트 시스템이 대상 플랫폼용으로 빌드할 수 있으면 ``True``를 반환하고, 그렇지 않으면 ``False``를 반환합니다. 사용자가 플랫폼 목록을 요청할 때 쿼리되므로 여기에 천천히 확인하지 마십시오. 대신 광범위한 종속성 검사를 위해 ``configure()``를 사용하세요.get_opts(): 이 플랫폼에 대해 사용자가 정의할 수 있는 SCons 빌드 옵션 목록을 반환합니다.get_flags(): 이 플랫폼에 대해 재정의된 SCons 플래그 목록을 반환합니다.configure(): 선택한 SCons 옵션에 따라 컴파일러 옵션을 선택하는 등의 빌드 구성을 수행합니다.
플랫폼 포트의 선택적 기능
실제로 화면에서 무엇이든 보고 입력 장치를 처리하려는 경우 헤드리스 작업으로는 충분하지 않습니다. 대부분의 게임에 오디오 출력이 필요할 수도 있습니다.
이 목록의 일부 링크는 Linux/*BSD 플랫폼 구현을 참조로 가리킵니다.
하나 이상의 `DisplayServers <https://github.com/godotengine/godot/blob/master/platform/linuxbsd/x11/display_server_x11.cpp>`__(윈도우잉 방법이 구현됨) DisplayServer는 마우스 지원, 터치스크린 지원 및 태블릿 드라이버(펜 입력용)와 같은 기능도 포함합니다. 자세한 내용은 `DisplayServer 싱글톤 헤더 <https://github.com/godotengine/godot/blob/master/servers/display_server.h>`__을 참조하세요.
전체 창 지원 기능을 제공하지 않는 플랫폼의 경우(또는 만들고 있는 포트와 관련이 없는 경우) 대부분의 창 기능은 대부분 구현되지 않은 상태로 남겨질 수 있습니다. 이러한 기능은 창 ID가 ``MAIN_WINDOW_ID``인지 확인하도록 만들 수 있으며 크기 조정과 같은 특정 작업은 플랫폼의 화면 해상도 기능(해당하는 경우)과 연결될 수 있습니다. 다른 창 ID를 만들거나 조작하려는 시도는 거부될 수 있습니다.
대상 플랫폼이 문제의 그래픽 API를 지원하는 경우: Vulkan, Direct3D 12 `OpenGL 3.3 또는 OpenGL ES 3.0 <https://github.com/godotengine/godot/blob/master/platform/linuxbsd/x11/gl_manager_x11.cpp>`__에 대한 렌더링 컨텍스트.
keyboard 및 `controller <https://github.com/godotengine/godot/blob/master/platform/linuxbsd/joypad_linux.cpp>`__용 입력 처리기입니다.
하나 이상의 오디오 드라이버. 오디오 드라이버는
platform/폴더(Android 및 웹 플랫폼의 경우) 또는 여러 플랫폼에서 이 오디오 드라이버를 사용할 수 있는 경우drivers/폴더에 있을 수 있습니다. 자세한 내용은 `AudioServer 싱글톤 헤더 <https://github.com/godotengine/godot/blob/master/servers/audio_server.h>`__를 참조하세요.Crash handler, 게임이 충돌할 때 충돌 역추적을 인쇄합니다. 이를 통해 로그에 쉽게 액세스할 수 없는 플랫폼에서 더 쉽게 문제를 해결할 수 있습니다.
`내보내기 처리기 <https://github.com/godotengine/godot/tree/master/platform/linuxbsd/export>`__(:ref:`doc_one-click_deploy`를 포함하여 편집기에서 내보내기용). 편집기에서 PCK만 내보내려는 경우에는 필요하지 않습니다. 그런 다음 PCK 파일과 일치하도록 이름을 바꾸어 내보내기 템플릿 바이너리를 직접 실행하십시오. 자세한 내용은 `EditorExportPlatform 헤더 <https://github.com/godotengine/godot/blob/master/editor/export/editor_export_platform.h>`__를 참조하세요. :ref:`doc_one-click_deploy`가 대상 플랫폼에 대해 구현된 경우 ``run_icon.svg``(16×16)가 플랫폼 폴더 내에 있어야 합니다. 이 아이콘은 대상 플랫폼에 대해 원클릭 배포가 설정된 경우 편집기 상단에 표시됩니다.
대상 플랫폼이 Vulkan, Direct3D 12, OpenGL 3.3 또는 OpenGL ES 3.0 실행을 지원하지 않는 경우 다음 두 가지 옵션이 있습니다.
런타임에 라이브러리를 사용하여 Vulkan 또는 OpenGL 호출을 다른 그래픽 API로 변환합니다. 예를 들어 `MoltenVK <https://moltengl.com/moltenvk/>`__는 macOS에서 런타임에 Vulkan을 Metal로 변환하는 데 사용됩니다.
만들기 처음부터 새로운 렌더러. 이는 특히 고급 기능을 사용하여 2D 및 3D 렌더링을 모두 지원하려는 경우 큰 작업입니다.
사용자 정의 플랫폼 포트 배포
위험
사용자 정의 플랫폼 포트를 배포하기 전에 링크되는 모든 코드를 배포할 수 있는지 확인하십시오. Console SDK는 일반적으로 공개 재배포를 방지하는 NDA를 따릅니다.
플랫폼 포트는 가능한 한 독립적으로 설계되었습니다. 대부분의 코드는 platform/``에 있는 단일 폴더에 보관할 수 있습니다. :ref:`doc_custom_modules_in_cpp`와 마찬가지로 이는 Godot 저장소 복제본의 ``platform/ 폴더 내의 플랫폼 폴더를 ``git clone``로 만든 다음 ``scons platform=<name>``를 실행함으로써 빌드 프로세스를 간소화할 수 있습니다. 타사 플랫폼별 종속성을 먼저 설치해야 하는 경우를 제외하고는 빌드에 다른 단계가 필요하지 않습니다.
그러나 사용자 정의 렌더링 드라이버가 필요한 경우 ``drivers/``에 다른 폴더를 추가해야 합니다. 이 경우 플랫폼 포트는 Godot 저장소의 포크로 배포되거나 Godot Git 저장소 복제본에 추가될 수 있는 여러 폴더 모음으로 배포될 수 있습니다.