Portar seu mecanismo para cada plataforma. Não há nada de especial nisso. Se você tiver algum código somente para Windows, adicione alguma lógica #ifdef no arquivo ou adicione um segundo arquivo (para que você tenha FooWindows.cpp
e FooLinux.cpp
ou qualquer outra coisa) que implemente esse recurso nos outros SOs de seu interesse .
O material de publicação com um clique que um mecanismo como o Unity possui é permitido porque o próprio Unity nunca é modificado pelo usuário final. Você está apenas escrevendo scripts e dados, para que o mecanismo tenha binários pré-criados para todas as plataformas e o botão publicar apenas agrupe esses binários com os dados.
Outros mecanismos contam com sistemas de compilação e compiladores cruzados para criar o jogo compilado quando necessário, assim como você faria com qualquer aplicativo de plataforma cruzada que não seja de jogo.
Para coisas como HTML5, existem ferramentas como emscripten que podem compilar um aplicativo C ++ para executar em JavaScript. Você basicamente precisa criar outra porta do seu mecanismo para emscripten (já que ele não pode usar nenhuma biblioteca / recurso C ++ arbitrário).
Você não precisa reescrever todo o jogo, mas definitivamente precisará fazer muito trabalho de desenvolvimento, codificação e portabilidade para cada nova plataforma que deseja oferecer suporte.
share/os/<linux>
(oushare/cpu/x86
) e colocar todo o código específico da plataforma e fazer inclusões condicionais. É pelo menos o que o gcc, o HotSpot e o kernel do Linux fazem (não é uma regra difícil). Sim, você pode começar com apenas uma única função que depende da plataforma e acha que é um exagero, mas nunca permanece assim e se torna uma bagunça rapidamente caso contrário.