답변:
엔진을 각 플랫폼에 이식하십시오. 특별한 것은 없습니다. 당신은 몇 가지 코드가있는 경우 윈도우를 전용, 다음 중 하나를 파일에 일부 #ifdef와 로직을 추가하거나 (당신이 가진 것, 그래서 두 번째 파일을 추가 FooWindows.cpp
하고 FooLinux.cpp
또는 무엇이든) 구현이 다른 OS의 기능 (들)은 당신이에 대한 관심이 있다는 것을 .
Unity 자체는 최종 사용자가 수정하지 않기 때문에 Unity와 같은 엔진에서 한 번의 클릭으로 게시 할 수 있습니다. 스크립트와 데이터를 작성하기 만하면 엔진에 모든 플랫폼에 대해 사전 빌드 된 바이너리가 있으며 게시 버튼은 해당 바이너리를 데이터와 함께 묶습니다.
다른 엔진은 게임 이외의 플랫폼 간 응용 프로그램에서와 마찬가지로 빌드 시스템과 크로스 컴파일러를 사용하여 필요할 때 컴파일 된 게임을 만듭니다.
HTML5와 같은 것에는 JavaScript에서 실행되도록 C ++ 응용 프로그램을 컴파일 할 수있는 emscripten과 같은 도구가 있습니다. 기본적으로 임의의 C ++ 라이브러리 / 기능을 사용할 수 없으므로 엔진의 다른 포트를 emscripten으로 만들어야합니다.
전체 게임을 다시 작성할 필요는 없지만 지원하려는 각 새로운 플랫폼에 대해 많은 개발, 코딩 및 포팅 작업을 수행해야합니다.
여기에 마법의 총알이 없습니다. 게임을 여러 플랫폼에서 실행하려면 여러 플랫폼에 대한 코드를 작성해야합니다 (또는 이미이 작업을 수행하는 타사 라이브러리를 활용해야 함).
당신이 요구하는 것들이 맞지 않습니다 : 당신은 말합니다 (강조 광산)
내가 찾고있는 것은 다시 작성하지 않고 다른 플랫폼에서 실행할 수있는 것을 통합하는 리소스입니다.
뿐만 아니라 (강조 광산)
나는 내 자신을 작성하는 대신 다른 엔진을 사용할 수 있다는 것을 알고 있지만 학습 경험에 관심이 있습니다 .
크로스 플랫폼 지원을 제공하는 타사 라이브러리, 엔진 및 / 또는 툴체인을 사용하거나 크로스 플랫폼 코드를 작성하여 자체 빌드를 선택하십시오 ( 사용 가능한 플랫폼에 대한 자체 추상화 및 각 플랫폼에 해당 추상화를 구현).
이 중 적절한 플랫폼 추상화에 대해 코드를 컴파일 지원, 또는 그들이 플랫폼 별 드라이버 실행 파일에서로드 내부의 API에 대한 라이브러리 또는 DLL 구축 할 필요 언리얼이나 유니티 같은 게임 엔진 들이 적절한에 대한 컴파일을 플랫폼.
다른 두 가지 답변 (정확하게 C ++에만 해당)과 달리 다른 방법이 있습니다. 떠오르는 일부 아키텍처 :
개인적으로 libGDX의 접근 방식이 가장 간단하다는 것을 알게되었습니다. 여러분의 요구에 맞는 언어 나 플랫폼을 찾아서 글을 쓰십시오. 코드 생성 및 휴대용 엔진은 복잡하고 작성하기가 어렵습니다.
libGDX는 주요 휴대 전화, 데스크톱 및 웹 (애플릿 또는 Google 웹 컴파일러를 통해)에 모두 적용되므로 실제로는 훌륭한 선택입니다.
현재 크로스 플랫폼 게임 엔진을 구축 중입니다. 나는 그래픽 응용 프로그램을 구축하기위한 우수한 (적절하게 낮은 수준의) 크로스 플랫폼 라이브러리 인 SDL을 사용하여 고통을 덜어줍니다.
그러나이 외에도 각 플랫폼에 대한 많은 "사용자 정의 코드"가 있습니다. 이것은 당신이 통과해야합니다. 나는 지금까지 개발 시간의 아주 작은 부분 인 것을 알았습니다. 대부분 기본 Linux만큼 익숙하지 않은 시스템에 대한 문서를 찾는 데 소비했습니다.
#ifdef
코드 전체 에서 사용하지 않는 것이 좋습니다 . 대신, 주요 프리미티브에 대한 추상화를 작성하십시오 (이러한 프리미티브의 예는 TCP 소켓 일 수 있음).
환경마다 다른 솔루션이 필요한 새로운 문제가 발생하면 "내가 이미 구축 한 크로스 플랫폼 프리미티브 만 사용하여이 문제를 해결할 수 있습니까?" 대답이 '예'라면 짜잔 간단한 크로스 플랫폼 코드입니다. 그렇지 않으면 누락 된 기본 요소를 찾아서 구현하십시오.
학습 경험으로 "처음부터"이 작업을 수행하려면 MSDN 및 OpenGL 위키 ( http : // www) 에서 창 및 OpenGL 컨텍스트 열기에 대한 정보를 찾을 수있는 Win32 API를 사용해야합니다 . .opengl.org / wiki / Creating_an_OpenGL_Context_ (WGL) ). Linux의 경우 O'Reilly Xlib Programming Manual 및 Xlib Reference Manual 의 초침 사본을 구하고 GLX (OpenGL Extension to X Window System)를 읽어보십시오. http://www.opengl.org/wiki/Tutorial:_OpenGL_3.0_Context_Creation_(GLX) 참조
그런 다음 동일한 작업 (예 : 창 열기)을 수행하지만 각 플랫폼마다 다른 구현을 갖는 함수를 사용하여 동일한 API를 애플리케이션에 제공하면됩니다. 다른 플랫폼에 맞게 엔진의 일부를 다시 작성합니다. 그런 다음 엔진을 사용하여 작성하는 게임은 한 번만 작성하면되지만 다른 플랫폼에서 작동합니다.
share/os/<linux>
(또는share/cpu/x86
)와 같은 것을 가지고 거기에 모든 플랫폼 특정 코드를 넣은 다음 조건부 포함을 수행하는 것이 좋습니다. 그것은 적어도 gcc, HotSpot 및 Linux 커널이하는 일입니다 (확실히 규칙은 아닙니다). 그렇습니다. 플랫폼에 의존하는 하나의 함수로 시작하여 과도하다고 생각하지만 결코 그렇게 유지되지 않으며 그렇지 않으면 빠르게 엉망이됩니다.