Puerto su motor a cada plataforma. No tiene nada de especial. Si tiene algún código que es solo de Windows, agregue alguna lógica #ifdef en el archivo o agregue un segundo archivo (para que tenga FooWindows.cpp
y / FooLinux.cpp
o lo que sea) que implemente esa característica en los otros SO que le interesan .
El material de publicación con un solo clic que tiene un motor como Unity está permitido porque el usuario final nunca modifica Unity. Simplemente está escribiendo scripts y datos, por lo que el motor tiene binarios preconstruidos para todas las plataformas y el botón de publicación solo agrupa esos binarios junto con los datos.
Otros motores dependen de sistemas de compilación y compiladores cruzados para crear el juego compilado cuando sea necesario, tal como lo haría con cualquier aplicación multiplataforma que no sea un juego.
Para cosas como HTML5, existen herramientas como emscripten que pueden compilar una aplicación C ++ para ejecutarse en JavaScript. Básicamente, solo necesita hacer otro puerto de su motor para emscripten (ya que no puede usar ninguna biblioteca / función arbitraria de C ++).
No tiene que reescribir todo el juego, pero definitivamente tendrá que hacer mucho trabajo de desarrollo, codificación y portabilidad para cada nueva plataforma que desee admitir.
share/os/<linux>
(oshare/cpu/x86
) y poner todo el código específico de la plataforma allí y luego hacer inclusiones condicionales. Eso es al menos lo que hacen gcc, HotSpot y el kernel de Linux (ciertamente, no es una regla difícil). Sí, puede comenzar con una sola función que depende de la plataforma y pensar que es exagerada, pero nunca se queda así y de lo contrario se convierte en un desastre rápidamente.