「で……『Godot Engine』の何が良いの？」について個人的に応える

この記事は、『[2023年 Godot Engine アドベントカレンダー](https://qiita.com/advent-calendar/2023/godot-engine)』の9日目の記事にな……りませんでした！！ :sob: 

おかしいなあ……求職活動と日常生活で忙殺されるなんて。

# せっかちな方向け

記事の内容を読む時間が無い方や、筆者のエッセイの様な雑文が要らない方向けに、一番最初に箇条書きで要点を記しておきます。

## 推しどころ

* ユーザー登録無しで無償で開発できる
* ゲームの動き(挙動)を作るのには困らない程度にバッテリーインクルードかつワン・バイナリ
* 『シーンシステム』による単体動作確認が容易

## 惜しいところ

* 「現存オブジェクトに挙動や機能を追加する」開発手法の為、リファレンスと睨めっこする事が多い
* 『Unity』や『Unreal Engine』と比較すると今の所情報量が少ない
* 上述のゲームエンジンの様なビッグタイトルが今の所無い

下2つは時間が解決してくれるかもしれない事を自戒を込めて期待しています。

1番目の惜しいところについては、ちょっと後述

# 筆者概略
穏便派フリーソフトウェア狂信者

「フリーソフトウェアで創作活動をして他人様にも創作活動を斡旋したいゾイ」
という経緯で Linux は Ubuntu でゲーム開発を目論でいましたが、『Unity』や『Unreal Engine』での先行事例を見せ付けられ、
「GUI エディタの強力さやプロトタイピング開発の早さ」
を思い知るのでした。

なお、『CoderDojo Sapporo』でメンターをやったり、『Global Game Jam』に毎年参加する程度には趣味もソフトウェアエンジニアだったりプログラミングの人です。
実務経歴は省略、一応 10 年はプログラマをやってたし、復職したい程度にはソフトウェアエンジニアリングは好きです。

# Godot Engine の推しどころ

せっかちな方向けでは列挙のみに留めましたが、以降の章では詳細について *語ります* 。

## ユーザー登録無しで無償で開発できる

有名どころのゲームエンジンと比較すると、この一点だけでも強い推しどころです。

特に、
「ゲーム開発を志すものの、諸般の事情でメールアドレスを持ち合わせていない」
「ゲーム開発に興味はあるが、そもそもインターネット回線が自宅に引かれていない」
という方々でも、ラピッドプロトタイピングでゲーム開発ができるのは良いことと思います。

MITライセンスの為ダウンロードはもちろん、実行ファイルの再頒布も可能なので、
インターネット回線が無い、あるいは細い環境下で作業するという時にも、
フラッシュメモリで実行ファイルを再頒布して各々のマシンにコピーしてもらうという事も可能です。

上述はハッカソンなどの様な、時間や環境が限られているイベントでは想像以上に重宝するととともに、
ハッカソン全体の円滑な運営にも貢献できるでしょう。

## バッテリーインクルード・ワンバイナリ

一つ手前の章で、

> フラッシュメモリで実行ファイルを再頒布して各々のマシンにコピーしてもらうという事も可能です。

と述べましたが、少なくとも筆者の手持ちの2GB程度のUSBメモリには、Windows, macOS, Linuxそれぞれの実行ファイルが圧縮されたzipファイルを収める事が可能でした。

実際に [Download](https://godotengine.org/download)のページでエンジンのダウンロードを試行して頂くと一目瞭然ではありますが、zip圧縮で55MB程度なのでかなり軽量かと思われます。

にも関わらず、スクリプトエディタ（内蔵テキストエディタ）や2D,・3Dアニメーション遷移制作ツール、あるいは、
「2Dグラフィックにボーンを組み込みアニメーションさせるツール」
などが一つの実行ファイルの中に揃っており、素材とゲームシステムのアイディアが揃っていれば、すぐにゲームの開発に着手する事は可能です。

:::note warn
ただし、着手したゲームを完成する事や、コンシューマー機含むプラットフォーム向けにビルドしたりリリースするまでは、ゲーム開発に着手したあなたやその周りの人々の意欲や、Godot Engine自体も含む人々の相性の問題はどうしても発生します
:::

## 『シーンシステム』による単体動作確認が容易

[Godotのキーコンセプト](https://docs.godotengine.org/ja/4.x/getting_started/introduction/key_concepts_overview.html)でも一番初めに紹介される『シーン』ですが、この仕組みと『シグナル』のコンセプトに、筆者は大変好感を抱いています。

他のゲームエンジンでの開発の様子をゲームジャムで眺めていると、
「動作確認はメインプログラムに組み込まないと判らない」
という様子を散見しますが、筆者個人としては、
「なんかもったいないなあ」
という印象です。

Godotでは、

> シーンは、キャラクターにも、武器にも、ユーザーインターフェースのメニューにも、個々の建物にも、地形全体にも、あるいは考慮しうる何にでもなりえます。Godotのシーンはフレキシブルであり、他のゲームエンジンでいうプレハブとシーン両方の役割を満たせます。

というコンセプトの為例えば、
「プレイヤーキャラクターのアニメーションと状態毎の遷移」
だけを、エディタのデバッグ実行で確認する事が可能です。
~~他のゲームエンジンのエディタでも可能だったかもしれません~~

もちろん先述の『シーン』に、後でも並行しても、遷移条件となるロジックのスクリプトや受け取る『シグナル』を定義して置くことで、ゲーム全体へ組み込む事も容易にできます。

:::note info
『シグナル』にちょっと触れておく

他のフレームワークやライブラリの「イベント」です
『.NET C♯』の[`EventArgs`](https://learn.microsoft.com/ja-jp/dotnet/api/system.eventargs)や『Pygame Zero』の[イベント処理のフック](https://pygame-zero.readthedocs.io/ja/latest/hooks.html#id3)が近しいでしょう。

> 例えば、ボタンが押されたとき信号が送出されます。この信号をつなぐことで、このイベントへの反応としてコードを実行させ、ゲームを開始させたりメニューを開いたりのようにできます。
>
> 他の組み込み済みのシグナルでは2つのオブジェクトの接触や、キャラクターやモンスターが一定のエリアに侵入したりといったことを通知することが出来ます。あなたのゲームに合わせた独自のシグナルを定義することも出来ます。

*[Godotのキーコンセプト](https://docs.godotengine.org/ja/4.x/getting_started/introduction/key_concepts_overview.html#signals)『シグナル』より*
:::

# 「現存オブジェクトに機能追加だって？」と思われた方へ

『Unity』でC♯プログラミングをやっていれば、MicrosoftかUnityのリファレンスを読み漁る事になるのは必然と筆者は思うのですが、ゲーム開発中級者や『Unity』で慣れた方には、
「クラス継承ベースのプログラミングって、逆にやり辛い」
という意見があったなあと[昔の意見交換](https://qiita.com/dala00/questions/761c3678dde975e8416b)を眺めて思い出しました。

とはいえ、
「画面更新の処理とは切り分けて、ゲームのセーブデータを読み書きする処理を作りたいだけなのだが」
「むしろゲームのセーブデータの構造の定義だけしいたいのだが」
という需要は筆者も抱きました。

そんな時に是非一読して頂きたいのは、Godot Engineの公式ドキュメントの[ノードの使用をさけるべき場合といろいろな方法](https://docs.godotengine.org/ja/4.x/tutorials/best_practices/node_alternatives.html)のページや、親に当たる[ベストプラクティス](https://docs.godotengine.org/ja/4.x/tutorials/best_practices/introduction_best_practices.html)の章は他ゲームエンジンから移行してきた方や検討をしている方は、斜め読みして頭の片隅に置いていても損は無いでしょう


# むすび

という事で、拙いながらGodot Engineの魅力を担当日付を超過して公開しました

Linuxでも『Unity』や『Unreal Engine』のエディタを利用できる様になった今日では、多少私が挙げた推しどころも霞んでしまうかもしれません

それでも、ユーザー登録無しでエディタ含めたエンジンの軽量さは、気軽にゲーム開発に挑戦する要素にはなるかと筆者は思います

また惜しいところでは、
「時間が解決してくれるかもしれない」
と述べましたが、何も無いよりは実例があった方が良いでしょう、という事で[Showcase](https://godotengine.org/showcase/)もどうぞ

なお筆者個人は上述のShowcaseに並んでいるゲームの中では、『[Resolutiion](https://store.steampowered.com/app/975150/Resolutiion/)』と『[Cassette Beasts](https://godotengine.org/showcase/cassette-beasts/)』を購入してます