GodotのWeb用カスタムエクスポートテンプレートの作成方法

こんにちは。
大阪のゲーム事業本部 エンジニアの岸下です。

今回は、ゲームエンジン『Godot』で使用するWeb用のカスタムエクスポートテンプレートの作成方法をご紹介します。

こちらのGodotは私も業務で初めて触れてみたのですが、デフォルトのエクスポートでは設定できない項目を管理することで、ROMの容量最適化等の対応もでき、容量管理などの点で非常に便利なツールだと感じました。
Unityなどの経験があると比較的学習しやすいツールですが、実際に触れてみて少し苦戦した箇所もあったので、そのときの注意点等も併せてご紹介したいと思います。

これからGodotを触ってみよう!という方には、ぜひ参考にしていただけると嬉しいです。

使用するGodotバージョンは3.5.3です。
理由としましては、現在Godot4のHTML5エクスポートはmacOS及びiOSで実行できないためです。
(詳細は、Webのエクスポート — Godot Engine (4.x)の日本語のドキュメントに記載)

Godotエンジンとは

Windows、Mac、Linuxで使用できるオープンソースのゲームエンジンになります。

ゲームエンジンといえば「Unity」と「Unreal Engine」の2つが有名ですが、こちらの「Godot」は以前Unityの料金問題があった際に移行先として話題になったゲームエンジンなので、聞いたことがある方も多いのではないでしょうか?

IDEが内蔵されているため別途VisualStudio等を用意する必要がなく、Pythonによく似た独自言語のGDScriptを使用する特徴があります。
「Unity」や「Unreal Engine」よりも後に公開されたゲームエンジンですが、初心者向けの学習資料も充実しており、2D・3Dどちらのゲーム制作にも適したゲームエンジンとなっております。
今回Web用の記事を作成するに至った理由でもあるのですが、スマホWebブラウザで動作可能なゲームを作成できるのも大きな魅力です。

godotengine.org

・Godotエンジン採用ゲーム

store.steampowered.com

カスタムエクスポートテンプレートとは

ROMの作成時にビルド設定を指定するためのZipファイルです。
これを使用することで、エディタ内で設定できない細かな内容も設定する事が出来ます。
Web用の設定として重要になりうる、JavaScriptシングルトンを無効化するという設定もテンプレートからのみ設定できます。
(JavaScriptシングルトンはセキュリティ上の問題につながる可能性があるため、必要ない場合は無効化しておくと良いと思います。)

事前準備

事前に以下を準備しておく必要があります。

  • emscripten 1.39.9以降
  • Python 3.5以降
  • SCons 3.0以降
  • GodotEngine3.5のソースコード
  • WSL環境

Godotのソースコードに関してはこちらをご覧ください。
ソースの取得 — Godot Engine (3.5)の日本語のドキュメント

注意点として、Web用のエクスポートテンプレートの場合、これらはWSL上で構築しなければならない可能性があります。
私の環境ではWindows上で構築した際に、プラットフォームでJavaScriptを選択できず、WSL上で再度試したところ解決したためです。

ビルド設定の方法

テンプレート作成時のコマンドの内容に追記する方法と、custom.pyに記載する方法の2種類があります。
それぞれ設定方法をご紹介させて頂きます。

①コマンドに追記する方法

基本的にはこちらの公式ドキュメントに纏められています。

Web用のコンパイル — Godot Engine (3.5)の日本語のドキュメント

  • リリース、デバッグの設定

 targetの指定をリリースの場合はrelease、デバッグの場合はrelease_debugを指定します。

scons platform=javascript tools=no target=release
scons platform=javascript tools=no target=release_debug
  • JavaScriptシングルトンの無効化

 javascript_eval=noを追記します。

scons platform=javascript tools=no target=release javascript_eval=no
scons platform=javascript tools=no target=release_debug javascript_eval=no
  • スレッドとGDNativeの設定

 デフォルトのエクスポートテンプレートにはスレッドとGDNativeサポートが含まれていないため
 使用する場合は有効にする必要があります。
 threads_enabledgdnative_enabledで記載する形になります。

scons platform=javascript tools=no threads_enabled=yes target=release
scons platform=javascript tools=no threads_enabled=yes target=release_debug

scons platform=javascript tools=no gdnative_enabled=yes target=release
scons platform=javascript tools=no gdnative_enabled=yes target=release_debug

②custom.pyに記載する方法

作成したcustom.pyファイルを、GodotEngineソースコードのルートに配置して、コマンドライン経由で渡されたSConsビルドオプションを初期化できます。
使用していない機能を無効にすることでバイナリサイズの最適化が出来ます。
前述したコマンドに追記する形でも下記のように指定はできるのですが、オプションが多くなってしまった際にはcustom.pyを使用する方が簡単に設定できます。

scons platform=javascript tools=no gdnative_enabled=yes target=release_debug javascript_eval=no optimize=size use_lto=yes disable_3d=yes

custom.pyの作成を行う場合、こちらのツールを使用すると非常に便利になります。
Godot build options generator
こちらでは設定可能なオプションとモジュールがチェックボックスに纏められており、無効にするものを選択してcustom.pyを作成できます。

公式のドキュメントに「ビルドのサイズを最適化する」というページがありますので、そちらを確認しながら設定を行うと効果的に最適化を行えます。
ビルドのサイズを最適化する — Godot Engine (3.5)の日本語のドキュメント

エクスポートテンプレートの使用方法

sconsコマンドで作成したエクスポートテンプレートはgodot/binフォルダの中に存在します。
こちらをプロジェクトのエクスポートオプションのカスタムテンプレート欄で指定することで使用できます。
ファイルパスを直接記載するか、右側のボタンでフォルダからも参照できます。
正しく設定が行えている場合、デフォルトのエクスポート時よりもサイズの削減などが行えます。

一部完全に解決できなかった問題点

自作したエクスポートテンプレートを使用してエクスポートを行った場合に一部の画像が表示されなくなる問題が発生しました。
画像の圧縮設定やメモリの確認を行っても改善せず、GDNativeの設定を有効化することで改善することが出来ました。
しかしGDNativeを有効化するとサイズが肥大化してしまうためもっと良い解決方法がありそうです…。

まとめ

いかがでしたでしょうか。
エクスポートテンプレートは、オプションの内容把握や取捨選択、作成のための環境構築など、少し手間にはなりますがROMの容量の最適化やJavaScriptシングルトンの無効化等得られるメリットは多いため、やっておいて損はないものかと思います。
(WindowsやAndroid用のカスタムエクスポートテンプレートは作成方法が異なるため、別途必要な環境等を準備して作成する必要があります。)

今回ご紹介した『Godot』はオープンソース且つ完全無料で使えるゲームエンジンなので、記事を読んで気になった方はぜひ気軽に触ってみていただけると嬉しいです。

最後までお読み頂きありがとうございました。

参考サイト

【Godot Engine】カスタムテンプレートを作成する方法

アドグローブでは、さまざまなポジションで一緒に働く仲間を募集しています!
詳細については下記からご確認ください。みなさまからのご応募お待ちしております。

採用情報