見出し画像

Godotエンジンのスクリプト解析ツールを作ってみた

Godotエンジンのスクリプト、GDScriptを解析するツールを作ってみました。何を解析するかというと、クラスの循環依存性(Cyclic Dependency)です。
Godotは3.xから4.xになった時に、循環する関係性でもクラス定義することが可能になりました。ClassAがClassBを使っていたとしても、ClassBは直接的にも間接的にもClassAを使うことができます。3.xではこれは許されなかったみたいです。
でも4.0.3においては、依然としてこういったクラスがあると、スクリプトエディタの自動補完、サジェストの機能が壊れやすくなる気がするんですよね。いわゆるIntelliSense的なやつです。壊れる原因は別の問題で、気のせいかもしれません。ですがとりあえず、このツールを作ってみました。Godotエンジン自体で。
このツールの制作は、Godot組み込みGUI(ButtonノードやTextEditノード)、ファイルダイアログ、FileAccess/DirAccessなど、Godotの各機能の使い方のお勉強も兼ねています。

ツール画面

こんな画面で、まずGodotのプロジェクトフォルダか、プロジェクトファイルのパスを左上の入力欄に入力します。もしくは"Select"ボタンを押すと、ファイルダイアログが開いて、こちらで指定することもできます。その後、右上の"Track"ボタンを押します。すると中央のテキスト領域にわけわからん文字がぶわーっと出てきます。これをCtrl+A→Ctrl+Cでコピーして、表計算ソフトに貼り付けます。

コピペするとこんな感じ

するとこうなります。タブ区切りデータは楽ですよね。これは、横軸も縦軸もクラス名になっていて、直接依存するときにはマトリックスにDが付きます。他クラス経由で間接的に依存するときにはiが付きます。それぞれ、DirectとIndirectの頭文字です。循環依存がある場合には、クラス名に@マークが付いてハイライト(?)されます。

これだけです。これを今作ってるゲームのプロジェクトに適用すると、さっそく循環依存を見つけてくれました。依存性は全部無くしたと思っていたのですが、やっぱり目視だけでは見逃しがあるようです。今後はこれをたまに使っていこうと思います。

このツール、最初はC#(.NET)で作ろうと思ったんです。でも久しぶりに.NET環境入れようとしたら、ストレージ容量とかダウンロード時間とかアカウントとかその他もろもろ結構大変で・・・。そこで、Godotでも作れることに気付いて、Godot製ツールの制作を試してみました。らくちんでした。
ちょっとしたアプリならGodotで作ったほうが楽かもしれません。環境が小さいし、成果物も小さい。Godotでゲーム作る糧にもなるし。
なのでみんなもGodotでゲームやツール作ろう!


この記事が気に入ったらサポートをしてみませんか?