Mirrativ Tech Blog

株式会社ミラティブの開発者(バックエンド,iOS,Android,Unity,機械学習,インフラ, etc.)によるブログです

UnityチームでGodot勉強会をしました

こんにちは、ミラティブ菅谷です。ミラティブではUnityチームで定期的に勉強会を行っています。今回はその取り組みの一つとして行ったGodot勉強会について紹介します。Unityエンジニアから見たGodotの特徴や触ってみての感想を記載しました。

背景:Unityライセンス体系の変更

2023年9月、Unityはライセンス体系の変更を発表しました。この変更は、多くのUnityユーザーに影響を与え、さまざまなゲームエンジンに関する議論を促しました。ミラティブのUnityチームもこの動きに注目し、ゲームエンジンの多様化に関する議論を行いました。最終的にライセンス体系は再変更されたため、ミラティブでもUnityからの移行は見送りとなりましたが、この話題をきっかけに他のゲームエンジンへの理解を深めることでUnityの長所と短所をより明確に把握することが必要であるとの結論に至りました。

Godot選択の理由

勉強会で学ぶゲームエンジンとしてGodotを選択しました。UE(Unreal Engine)も候補に挙がりましたが、Godotが選ばれた理由はいくつかあります。Godotはオープンソースソフトウェア(OSS)であり、チームメンバーの一人が以前から使用していた経験から、その特徴と優れた点を理解していました。また、学習に必要な情報やチュートリアルの知識も既にチーム内にあったため、学習の出発点として最適でした。

godotengine.org

勉強会の進行

勉強会では、公式に提供されている2Dゲーム開発チュートリアルを活用しました。毎週1時間、参加者全員で集まり、チュートリアルに沿って進めることにしました。実装に詰まった点やUnityとの違いを感じた際には、全員で討論し、Godotの特徴を掴みました。その後、各自がオリジナルゲームを開発。時間の制約から、既存のゲームを参考にしながらGodotの操作に集中することを目的としました。このプロセスを通じて、4回分のチュートリアルと4回分のゲーム制作を行い、成果を振り返りました。

https://docs.godotengine.org/ja/4.x/getting_started/first_2d_game/index.html

勉強会の成果

既存のゲームを真似したものでもデザインやルールに違いが出て個性がありました。他にも3Dでコインプッシャーを作ってみるなどの挑戦も行われました。 また、メンバーの中には個人でゲームを完成させたり、Godotのゲームジャムに参加するなど積極的な取り組みも見られました。

以下のゲームは実際に遊べます。

godotplayer.com

godotplayer.com

Godotの特徴:Unityエンジニアの視点から

Godotは以下のような特徴を持っています。

メリット

  • 高速かつ軽量で、スムーズな開発体験を提供: Godotは軽量で応答性が高く、迅速な開発サイクルを可能にします。これは、特に小規模なプロジェクトや短期間でのプロトタイピングにおいて大きな利点です。具体的にはエディタの起動時間や再生が速く、ホットリロードによるデバッグのしやすさが挙げられます。また、プロジェクトのエクスポートが数秒程度で終わるため実際の動作確認が簡単に行えました。
  • エディタが統合されており、切り替えが不要: Godotのスクリプトエディタはエンジンに統合されており、外部IDEとの切り替えが必要ありません。エディタとIDEとのコンテキストスイッチの切り替えがなく、コード編集後のコンパイルも入らないため、シーンの作成とコードの作成が一体となり開発がスムーズに行えました。
  • OSSであるため、カスタマイズが容易: オープンソースであることから、Godotはカスタマイズが容易であり、開発者のニーズに応じてエンジン自体を改変することが可能です。
  • 豊富なドキュメントと、ChatGPTのサポートによる情報提供: 充実した公式ドキュメントが役に立ちました。エディタ内から直接ドキュメントやヘルプが参照できるため、情報へのアクセス性も高いです。また、ChatGPTのようなAIツールのサポートが受けられ、GDScriptの作成における迷いが減らせました。
  • 開発体験が総合的に良好: Godotは開発者の体験に重点を置いて設計されており、直感的かつ効率的な開発が可能です。

便利機能や仕様について

Godotを実際に使用して感じた便利な機能や仕組みについて具体例を紹介します。

  • 開発のサポート機能
    • ノードごとにメモを残したり、固有のKey Valueペアが設定できます。
    • クラスなどのドキュメントを自身で作成でき、エディタからすぐに確認できます。
    • エディタで行ったアクションや編集内容がコンソールにログとして出力されます。
  • 型や参照先のサポート
    • GDScriptは動的言語ですが、func hoge() -> void:などと型を指定することもでき、静的言語のように扱うこともできます。
    • UnityのSendMessage/UnityEventと異なり、Signalは接続先が一覧で表示されるため、使用状況が追いやすくなっています。
  • Unityとの仕様の違い、優れた点
    • 開発時はマルチプラットフォームの切り替えが必要なく、エクスポート時に指定する方式であり、ビルドも高速です。
    • オブジェクトの当たり判定をLayerとMaskの2つのパラメータで管理できます。
      • ぶつかった片側のオブジェクトのみ衝突イベントを実行するような実装が簡単に作れます。
    • オブジェクトのポーズが可能で、ポーズのルールもオブジェクト毎に詳細に設定できます。
    • キー入力(Input)に関する処理は_input(event)関数が使用でき、Updateループから独立させて実装できます。

デメリット

  • コミュニティや情報源がUnityに比べて少ない: Godotはまだ成熟したオープンなコミュニティを持っておらず、Unityのような広範囲のサポートは期待できません。そもそもUnityと異なりOSSであるため必要な機能は自分たちで作る文化が強いように思えます。また、情報の共有もブログのようなオープンなものが主流ではなく、公式Discordサーバーのようなクローズドな場で行われているように感じました。Discordコミュニティでは活発な議論やコントリビューターによる活動も行われているので、開発者は参加をおすすめします。
  • 便利なライブラリがまだ充実していない: Godotはまだ発展途上であり、Unityのような豊富なライブラリやアセットが不足しています。前述のように足りない機能は自分で作る必要があります。
  • Unityとは異なる部分があり、学習曲線が存在する: Unityユーザーにとっては、Godotの異なるアプローチや機能に慣れる必要があり、一定の学習が必要です。

不明確な点

  • 長期運用の実用性: Godotが大規模プロジェクトや長期運用にどの程度適しているかは、まだ明確ではありません。アセット数の増加や継続的な運用がどれほど可能かは前例も少ないためわかりませんでした。
  • 複雑な機能の実現可能性: GodotがUnityやUEと比較してどれだけ複雑な機能を実現できるかは、今後の開発によって明らかになるでしょう。
  • シーンとスクリプトの密接な関連性: Godotでは、シーンとスクリプトの関連性が非常に強く、この設計思想が一部の開発者には合うかもしれませんが、他の人には合わない可能性があります。

結論として、Unityに近い機能を持ちつつ、より軽量で迅速なイテレーションが可能なGodotは、UnityやUEとは異なる一つの選択肢として非常に魅力的です。今後、情報量が増え、コミュニティが活性化すれば、より推奨できるゲームエンジンとなることでしょう。

We are hiring!

UnityチームではUnityに限らずためになる技術はチームとして学ぶようにしています。新しい技術や流行には偏見を持たず、まずは自分たちで触ってみて、自分の経験として学べる取り組みを進めていきたいですね。ミラティブではそんな仲間を募集しています!!

mirrativ.co.jp

mirrativ.notion.site

speakerdeck.com