GDExtensionシンプルに環境構築するよ Pt.1
GodotエンジンのGDExtenstionの環境構築に関する記事です。
GDExtenstion試してみてます。数日色々やってみて、ようやくGodotのプロジェクトにエラー無く認識されるビルドが通りました。サンプルコードのビルドが通っただけなのでここからが本番なんですけど、忘れないうちに、気づきや理解をこの記事に書いていこうと思います。
【スペック】
・Godot 4.1
・Windows10/11でWindows10/11アプリ向けのdllを作る
【方針】
・ストレージ容量をできるだけ使わない
・パソコンをクリーンに保つ
→直置き可能なツールはできるだけインストールせずに使う
→環境変数等の設定も最小限にとどめる
普段からお仕事などでプログラムたくさん書く人にとっては、公式ドキュメントに書いてある内容や、Youtubeの解説動画だけで、環境構築するには十分な情報が得られると思うのです。
でも筆者にはわからんことだらけでした。SCons??? MinGW???
WindowsでVisual StudioやUnityを使って自作ゲーム作ってる、くらいの頻度でプログラム触ってる人向けの情報が、ネットに必要だと思いました。そこでこの記事を書く次第です。
GDExtension
GDExtensionは、Godot Game Enginで、スクリプトからネイティブコード(のDLL)を呼ぶための機能です。
単にゲーム作る分には不要なんですけど、Steamでリリースしたり、XInput経由でコントローラを振動させたりしたいときは、必要になると思います。また、C++で書いたコードでパフォーマンスを上げたいときにも、この機能が使えるのではないでしょうか。
この機能は、プラグイン(addons)とは別ものです。
・プラグイン自体は、GDScriptだけでも作れるはずです。
・また、プラグインを経由せずとも、GDExtensionは使えます。
・でもGDExtensionを使ったプラグインも存在するみたいです。
使い方
・.gdextension拡張子のテキストファイル
・呼び出したいDLL
この2つを、Godotプロジェクトに放り込みます。公式ドキュメント等では"bin"フォルダ下に置くように書いてありますが、おそらくそれは慣習で、必須ではないです。また、.gdextensionファイルとDLLは同じフォルダじゃなくてもいいです。
.gdextensionファイルの中には、「"res://フォルダ名/DLL名.dll"というdllを読み込んでね」という旨の宣言を書いておきます。
すると自動的にプロジェクトに取り込まれて、dll内で定義された自作GDクラスが使えるようになります。
DLLの作り方
で、このDLLですけど、自分で勝手に作ったdllファイルを使えるわけではありません。ましてや第三者の提供してるdllも呼べません。先に「自作GDクラスが使えるように」なると書いた通り、GDScriptから使うためには、GDのいちクラスとしてGodotに登録する、特殊な処理が必要になるわけです。
godot-cpp
この特殊な処理を提供するのが、GitHubにある、godotengine/godot-cppです。これはビルドされたバイナリは(多分)存在しません。あくまで自分のC++コードからincludeして使うための、cpp/hppファイル群です。
じゃあこれをいつものVSを使って、いつも通りにプロジェクトに組み込んで、dllをビルドすればいいのかというと、どうもそうではないようです。ビルド環境(Windows、Linux、Mac、etc)とビルドターゲット(PC、スマホ)に合わせていろいろと複雑な手続きが必要なんだと思います。他にもいろいろ事情があるんでしょうけど、想像もつかん・・・。
で、その複雑な手続きをやってくれるのが、SConsというツールです。なのでVisual StudioのGUIからF5キー押してビルド実行はしません。SConsがコンパイラを呼びます。
SCons
SConsは、ビルドツールです。makeの21世紀版みたいなものだと理解してます。Pythonを使って複雑なビルド処理を書けます。プログラマブルシェーダーならぬ、プログラマブルビルダーといった趣です。
このSconsに処理してもらうPythonスクリプトが、"SConstruct"(拡張子無し)という名前のファイルです。たぶんこの名前じゃなくてもいいでしょうけど、処理ファイルを指定しないときのデフォルト名がこれなんです。
ちょっと待って! Python書かなきゃいけないの!?
大丈夫です。Python処理のほとんどは、先のgodot-cppに含まれてるPythonファイル(.py)がやってくれます。自分のSConstructからは、これを呼ぶだけです。呼ぶコードのテンプレもありますので、穴埋めで行けます。
SconsをWindows上で実行すると、godot-cppの用意したスクリプトは、コンパイラとして次の2つを使おうとします。
・MSVC (2017 or 2019)
・MinGW
この記事ではVCではなくMinGWを採用します。ストレージ容量の消費が小さくて済みそうなのと、シンプルそうだからです。MinGWのMinはミニマリストのMinだそうです。ぴったり。
MinGW
MinGWはコンパイラ、リンカ、標準ライブラリを含めた、プログラムツールです。VSの同族(ただしGUIが付かない)だと理解してます。
これもGitHubからダウンロードできます。インストールは不要です。
Python実行環境
SConsは自分だけではPyhonスクリプトを実行できません。Pyhonの実行環境が別に必要です。.NET環境みたいな感じです。BlenderのPythonスクリプトはそういうの無くても動きますけど、Blenderの場合はpython310.dllというファイルが付属しているので、これで動いているのでしょう。SConsの場合は共通ランタイムとして必要ということです。
Python.orgの公式サイトからダウンロードできます。これも、ちょっとひと手間あればインストール不要です。インストーラーもあります。
実はSConsの導入にも、このPython実行環境が必要です。他の方法もあるんでしょうけど、Python経由が推奨されてます。
どういうことかというとPyPI(Python Package Index)という仕組みを使います。Wikipediaでは「包括的なカタログ」と称されてます。Python公式のアプリストアみたいなものだと理解しています。
Pythonスクリプトを使って、PyPIからSConsをダウンロードします。
全体像
ビルド環境の全体像は下図のような感じかなと思ってます。
では、それぞれのツールをどうインストールして、どうセットアップするのかというと・・・
つづく
この記事が気に入ったらサポートをしてみませんか?