回答:
エンジンを各プラットフォームに移植します。それについて特別なことは何もありません。Windows専用のコードがある場合は、ファイルに#ifdefロジックを追加するか、他のOSでその機能を実装する2番目のファイルを追加します(そのためFooWindows.cpp
、FooLinux.cpp
必要なものは何でも)。 。
Unity自体がエンドユーザーによって変更されることはないため、Unityのようなエンジンが持つワンクリックパブリッシュは許可されます。スクリプトとデータを記述しているだけなので、エンジンにはすべてのプラットフォーム用のビルド済みのバイナリがあり、公開ボタンはそれらのバイナリをデータと一緒にバンドルするだけです。
他のエンジンは、ビルドシステムとクロスコンパイラに依存して、必要なときにコンパイルされたゲームを作成します。これは、ゲーム以外のクロスプラットフォームアプリケーションで行うのと同じです。
HTML5などには、JavaScriptで実行するC ++アプリケーションをコンパイルできるemscriptenなどのツールがあります。基本的にemscripten用にエンジンの別のポートを作成する必要があります(任意のC ++ライブラリ/機能を使用できないため)。
ゲーム全体を書き直す必要はありませんが、サポートする新しいプラットフォームごとに多くの開発、コーディング、移植作業を行う必要があります。
ここには魔法の弾丸はありません。ゲームを複数のプラットフォームで実行したい場合は、複数のプラットフォーム用のコードを作成する必要があります(または、既にこれを行っているサードパーティのライブラリを活用します)。
あなたが求めているものは整合していません:あなたは言います(強調鉱山)
私が探しているのは、書き換えることなく異なるプラットフォームで実行できるようにするものを統合するためのリソースです
しかし、それも(再び強調する)
自分で書く代わりに別のエンジンを使うことができることを知っていますが 、学習経験に興味があります。
どちらか一方を行う必要があります:クロスプラットフォームサポートを提供するサードパーティのライブラリ、エンジン、および/またはツールチェーンを使用するか、クロスプラットフォームコードを記述して独自のライブラリを作成するか(利用可能なプラットフォーム上で独自の抽象化を行い、各プラットフォームにその抽象化を実装します)。
サポートは、これはどちらか彼らは、プラットフォーム固有のドライバの実行可能ファイルからロードされ、適切なプラットフォームの抽象化に対するあなたのコードを再コンパイル、またはその内部APIに対してライブラリやDLLを構築するためにあなたを必要とすることを非現実的またはユニティのようなゲームエンジン、彼らが適切なのためにコンパイルしていますプラットホーム。
他の2つの答え(C ++固有のものです)に反して、別の方法があります。頭に浮かぶいくつかのアーキテクチャ:
個人的には、libGDXのアプローチが最も簡単であることがわかります。ニーズを満たす言語またはプラットフォームを見つけて、その上に書きます。コード生成とポータブルエンジンは複雑で、うまく書くのは難しいです。
libGDXは、主要な携帯電話、デスクトップ、およびWeb(アプレットまたはGoogleのWebコンパイラを介して)の両方にヒットするため、実際には素晴らしい選択肢です。
現在、クロスプラットフォームのゲームエンジンを構築しています。痛みを和らげるために、グラフィックアプリケーションを構築するための優れた(そして適切な低レベルの)クロスプラットフォームライブラリであるSDLを使用しています。
ただし、これを超えると、プラットフォームごとに多くの「カスタムコード」があります。これはあなたが通過しなければなりません。これまでのところ、開発時間のごくわずかな時間であり、ほとんどがネイティブLinuxほど馴染みのないシステムのドキュメントの検索に費やされています。
使用しないでください #ifdef
コード全体でどこでもください。代わりに、主要なプリミティブの周りに抽象化を構築します(そのようなプリミティブの例はTCPソケットかもしれません)。
環境ごとに異なるソリューションを必要とする新しい問題が発生した場合は、「既に構築したクロスプラットフォームプリミティブのみを使用してこの問題を解決できますか?」答えが「はい」の場合、できればシンプルなクロスプラットフォームコードです。それ以外の場合は、不足しているプリミティブを把握して実装します。
学習体験としてこれを「ゼロから」行う場合は、Win32 APIを使用する必要があります。Win32APIでは、MSDNおよびOpenGL wiki(http:// www .opengl.org / wiki / Creating_an_OpenGL_Context_(WGL))。Linuxについては、O'Reilly XlibプログラミングマニュアルとXlibリファレンスマニュアルのコピーを入手し、GLX(X Window SystemのOpenGL拡張)を参照してください。http://www.opengl.org/wiki/Tutorial:_OpenGL_3.0_Context_Creation_(GLX)も参照してください
次に、同じこと(ウィンドウを開くなど)を行う関数を使用して、アプリケーションに同じAPIを提供するだけで、プラットフォームごとに異なる実装が必要になります。さまざまなプラットフォーム用にエンジンの一部を書き換えます。次に、エンジンを使用して作成するゲームは、一度書くだけで済みますが、異なるプラットフォームで動作します。
share/os/<linux>
(またはshare/cpu/x86
)のようなものを用意し、そこにすべてのプラットフォーム固有のコードを入れてから、条件付きインクルードを行うのは間違いなく良いです。これは、少なくともgcc、HotSpot、Linuxカーネルが行うことです(確かに難しい規則ではありません)。はい、プラットフォームに依存する単一の機能のみで開始し、それが過剰であると考えるかもしれませんが、それはそのようにとどまることはなく、そうでなければすぐに混乱になります。