Monoでコンパイルする

必要条件

  • Mono 5.12.0以降
  • MSBuild
  • NuGet
  • pkg-config

HTTPS要求を実行するには、NuGetに必要な証明書をインポートする必要がある場合があります。

推奨される方法は、curl のCA(Certificate Autorities)証明書バンドルを使用することです。

次のコマンドを実行して、ダウンロードしてインポートします。Windowsでは、Monoコマンドラインプロンプト(またはMonoの bin ディレクトリを PATH 環境変数に追加した場合は通常のプロンプト)から実行できます:

curl -LO https://curl.haxx.se/ca/cacert.pem
cert-sync --user cacert.pem

または、次のコマンドを使用できますが、非推奨であり、正しく機能しない場合があります:

mozroots --import --sync

環境変数

デフォルトでは、SConsはWindowsのWindowsレジストリまたは他のプラットフォームのpkg-configを介してMonoを見つけようとします。SConsに mono_prefix コマンドラインオプションを渡すことで、別のインストールディレクトリを指定できます。例えば scons [...] mono_prefix=%ProgramFiles%/Mono など。

これは、サブディレクトリ include および lib を含むディレクトリです。

Monoモジュールを有効にする

デフォルトでは、Monoモジュールはビルド時に無効になっています。有効にするには、SConsコマンドラインにオプション module_mono_enabled=yes を追加します。

glueを生成する

glueソースは、マネージメソッドによって呼び出されるラッパー関数です。これらのソースファイルは、最終的なバイナリをビルドする前に生成する必要があります。それらを生成するには、まず、オプション tools=yes および mono_glue=no: で一時的なGodotバイナリをビルドする必要があります。

scons p=<platform> tools=yes module_mono_enabled=yes mono_glue=no

ビルドが完了したら、パラメーター --generate-mono-glue に続けて出力ディレクトリへのパスを指定して、コンパイルされた実行可能ファイルを実行する必要があります。このパスは、Godotディレクトリの modules/mono/glue でなければなりません:

<godot_binary> --generate-mono-glue modules/mono/glue

このコマンドは、ファイル modules/mono/glue/mono_glue.gen.cpp と、modules/mono/glue/Managed/Generated にあるGodot APIのC#ソリューションを生成するようにGodotに指示します。これらのファイルが生成されると、このプロセスを繰り返すことなく、目的のすべてのターゲットに対してGodotを構築できます。

<godot_binary> `` は、Monoモジュールを有効にして上記でコンパイルしたツールバイナリを指します。その正確な名前はシステムと設定によって異なりますが、\ ``bin/godot.<platform>.tools.<bits>.mono の形式にする必要があります。bin/godot.x11.tools.64.mono または bin/godot.windows.tools.64.exe.mono サフィックスに特に注意してください!以前にMonoサポートなしでGodotをコンパイルしたことがある場合、この接尾辞のない同様の名前のバイナリがあるかもしれません。これらのバイナリは、Monoのglueの生成には使用できません。

備考

  • mono_glue=no最終的なバイナリをビルドしないでください。これにより、C#スクリプトが無効になります。このオプションは、glueを生成する一時バイナリにのみ使用する必要があります。glueソースなしでビルドされた場合、Godotは起動時に警告を出力します。
  • glueソースは、ClassDBに登録されたAPIが変更されるたびに再生成する必要があります。つまり、たとえば、新しいメソッドがスクリプトAPIに登録されたとき、またはそのようなメソッドのパラメーターの1つが変更されたときです。 ClassDBとグルーソースの間にAPIの不一致がある場合、Godotは起動時にエラーを出力します。

Mono glueで再構築

Mono glueを生成したら、mono_glue=yes を使用して最終バイナリをビルドできます。これは mono_glue のデフォルト値なので、省略することもできます。 Mono対応のエディタを作成するには:

scons p=<platform> tools=yes module_mono_enabled=yes mono_glue=yes

そして、Mono対応のエクスポートテンプレート:

scons p=<platform> tools=no module_mono_enabled=yes mono_glue=yes

通常の出力とは別に、すべてがうまくいった場合、SConsは bin ディレクトリに以下のファイルを作成しているはずです:

  • Monoランタイムを静的にリンクしない場合、ビルドスクリプトはMonoランタイム共有ライブラリ(monosgen-2.0)を出力ディレクトリのGodotバイナリの隣に配置します。Godotを配布するときは、このライブラリを必ず含めてください。Androidを対象とする場合、このライブラリは #platform/android/java/libs に自動的にコピーされ、Gradleが残りを処理するため、追加の手順は必要ありません。
  • 「クラシック」Godotビルドとは異なり、Monoモジュールを有効にしてビルドする場合(およびターゲットプラットフォームに応じて)、エディタとエクスポートテンプレートの両方にデータディレクトリが作成される場合があります。このディレクトリは適切に機能するために重要であり、Godotとともに配布する必要があります。このディレクトリの詳細は、:re:`データディレクトリ <compiling_with_mono_data_directory>` にあります。

例(Windows)

# Build temporary binary
scons p=windows tools=yes module_mono_enabled=yes mono_glue=no
# Generate glue sources
bin\godot.windows.tools.64.mono --generate-mono-glue modules/mono/glue

### Build binaries normally
# Editor
scons p=windows target=release_debug tools=yes module_mono_enabled=yes
# Export templates
scons p=windows target=release_debug tools=no module_mono_enabled=yes
scons p=windows target=release tools=no module_mono_enabled=yes

例(X11)

# Build temporary binary
scons p=x11 tools=yes module_mono_enabled=yes mono_glue=no
# Generate glue sources
bin/godot.x11.tools.64.mono --generate-mono-glue modules/mono/glue

### Build binaries normally
# Editor
scons p=x11 target=release_debug tools=yes module_mono_enabled=yes
# Export templates
scons p=x11 target=release_debug tools=no module_mono_enabled=yes
scons p=x11 target=release tools=no module_mono_enabled=yes

データディレクトリ

データディレクトリは、Monoモジュールを有効にして構築されたGodotバイナリの依存関係です。Godotが正しく機能するための重要なファイルが含まれています。Godot実行可能ファイルと一緒に配布する必要があります。

注釈

以下の情報はAndroidには適用されません。そのプラットフォームにはデータディレクトリがないためです。

テンプレートのエクスポート

エクスポートテンプレートのデータディレクトリの名前は、それが構築された構成によって異なります。形式は data.mono.<platform>.<bits>.<target> `` です。例: ``data.mono.x11.32.release_debug または data.mono.windows.64.release

このディレクトリは、Godotエクスポートテンプレートの横に元の名前で配置する必要があります。プロジェクトをエクスポートするとき、Godotはこのディレクトリをゲームの実行可能ファイルとともにコピーしますが、名前は data_<APPNAME> `` に変更されます。ここで、\ ``<APPNAME> `` はプロジェクト設定で指定されたアプリケーション名 ``application/config/name です。

エクスポートテンプレートがZIPアーカイブとして圧縮されているmacOSの場合、データディレクトリのコンテンツはZIPアーカイブ内の次の場所に配置できます:

bin/data.mono.<platform>.<bits>.<target>/Mono/lib /osx_template.app/Contents/Frameworks/GodotSharp/Mono/lib
bin/data.mono.<platform>.<bits>.<target>/Mono/etc /osx_template.app/Contents/Resources/GodotSharp/Mono/etc

エディタ

Godotエディタのデータディレクトリの名前は、常に GodotSharp です。このディレクトリの内容は次のとおりです:

  • Api
  • Mono (オプション)
  • Tools

Api サブディレクトリにはGodot APIアセンブリが含まれています。macOSでは、Godotエディタがバンドルとして配布されている場合、データディレクトリのコンテンツは次の場所に配置できます:

bin/data.mono.<platform>.<bits>.<target>/Api <bundle_name>.app/Contents/Frameworks/GodotSharp/Api
bin/data.mono.<platform>.<bits>.<target>/Mono/lib <bundle_name>.app/Contents/Frameworks/GodotSharp/Mono/lib
bin/data.mono.<platform>.<bits>.<target>/Mono/etc <bundle_name>.app/Contents/Resources/GodotSharp/Mono/etc
bin/data.mono.<platform>.<bits>.<target>/Tools <bundle_name>.app/Contents/Frameworks/GodotSharp/Tools

Mono サブディレクトリはオプションです。ユーザーがインストールしたMonoバージョンがGodotエディタのビルドに使用したものと同一でない場合に問題が発生する可能性があるため、エディタを配布するときに必要になります。このフォルダとその内容を作成するためにエディタをビルドするときは、SConsに copy_mono_root=yes を渡します。

Tools サブディレクトリには、GodotTools アセンブリやその依存関係など、エディタに必要なツールが含まれています。

Androidをターゲットとする

Monoを使用したAndroidエクスポートテンプレートのコンパイルは、構築後に追加の手順が必要ないため、デスクトッププラットフォームの場合よりも少し簡単です。Gradleプロジェクトに自動的に追加されるため、データディレクトリや共有ライブラリ(動的リンクの場合)などの実行時の依存関係を心配する必要はありません。

Godotをビルドする前に、ターゲットアーキテクチャのMonoランタイムをクロスコンパイルする必要があります。これらの `ビルドスクリプト <https://github.com/godotengine/godot-mono-builds>`_を使用することをお勧めします。このプロセスは簡素化されますが、Godotで適切に機能するために必要なパッチも含まれています。スクリプトの使用方法については、上記のリンクのREADMEをご覧ください。

Monoをビルドしたら、このページと Compiling for Android ページで説明されている手順でGodotのビルドに進むことができます。作成したMonoランタイムの場所をSConsに必ず知らせてください: scons [...] mono_prefix="$HOME/mono-installs/android-armeabi-v7a-release" (このパスはMonoのビルドに使用したオプションに応じて、システムによって異なる場合があります)。

コマンドラインオプション

以下は、Monoモジュールでビルドするときに使用できるコマンドラインオプションのリストです:

  • module_mono_enabled **: Monoモジュールを有効にしてGodotをビルドします(yes | **no)
  • mono_glue **: ビルドにグルーソースファイルを含め、プリプロセッサマクロとして ``MONO_GLUE_DISABLED`` を定義するかどうか(**yes | no)
  • mono_prefix: ターゲットプラットフォームとアーキテクチャのMonoインストールディレクトリへのパス
  • xbuild_fallback: MSBuildが利用できない場合にxbuildにフォールバックするかどうか(yes | no)
  • mono_static: Monoランタイムを静的にリンクするかどうか(yes | no)
  • copy_mono_root: Godotエディタに必要なMonoフレームワークアセンブリと構成ファイルをコピーするかどうか (yes | no)