😞

Godotに移行しようとして諦めた話

2023/10/09に公開

Unityでごたごた騒動があったとき、作ってるアプリをGodotに移植したんですが、最終的に騒動が落ち着いたときUnityに戻った理由と経緯を残しておきます。この課題が解消されない限り、Godotを本番に使うのは少なくとも日本のスマホ業界では難しいかな、という印象です。

背景情報

筆者はモバイル向けゲームのクライアントエンジニアとして従事しています。Unity での経験が6年で、うち2年が SDK 開発で、残り4年がモバイル向けゲーム開発になります。今回 Godot の開発は個人開発のゲームのことであり、会社では引き続き Unity を使用しています。

Godotのいいところ: 触った感覚はGodotが圧倒的

現在スマホ向けのアクション/ソーシャルゲーム的なものを作っているのですが、やはりUnityと比べるとGodotの方が圧倒的に作りやすいです。スマホで使用できるような最低限の機能(複数解像度対応など)は完備されていますし、Godot 3.5以降はAndroid/iOS向けのプラグインも作りやすくなったので作ってる上で困ることはほぼありませんでした。強いて言えば3.5を使っていたのでフォントの取り扱いが面倒でしたが、4.0以降ではここも改善されています。

また、「こういうのみんな使うでしょどうせ」みたいな機能が非常に多いのが特徴的です。Unityでは移動やジャンプでまあまあコードを書く必要がありますが、Godotでは大体move_and_slideで事足ります。またコリジョンを細かく設定できるの、「行動不能になって破壊アニメーションを流しつつ、プレイヤーの弾がすり抜けるけど他の敵の物理演算には影響する」みたいな設定がすごく楽です。Unityの場合これを実現しようと思うとそれ用のLayerを作る必要があり、Layer Matrixが肥大化していきます。

Godotのもう一歩なところ: その他

ただ、やっぱり本番使用する上でかなり足を引っ張る部分がありました。以下の3つです。

  1. 簡単って言っても、やっぱ Unity と比べるとモバイルプラグインはめんどくさい
  2. Godot 4.0 で C# のモバイル実装が遅れている
  3. Godot 3.5 の Android バイナリがガバガバである

簡単って言っても、やっぱ Unity と比べるとモバイルプラグインはめんどくさい

ここは頑張ってはいるのですが、やはり Unity のプラグインと比べるとかなり大変です。Unity はモバイルで開発する会社が多いからだと思うのですが、ここ5年で圧倒的に進化しました。最初の頃は Plugins/Android などかなり制限された場所にファイルを置く必要はありましたが、それでも .java や .mm ファイルを置くだけで Unity と連携できるのは非常に楽でした。それも進化し、フォルダの制限が撤廃され、Package Manager や EDM4U の出現で圧倒的に簡単になりました。このへんは正直 Godot は現状足元にも及ばないって感じです。できるんですけどね、大変です。

Godot 4.0 で C# のモバイル実装が遅れている

これは設計上、仕方ない部分もあるかもしれないんですが、Godot 4系では Mono から .NET 6/7 へ移行したせいでモバイル対応が遅れています。これは当然できないわけではなく(Xamarin/Mauiは対応してる)単純に Godot において C# とそのモバイル環境が二の次になっているんだと思います。Godot では GDScript に関わる開発が当然優先されるんですが、自分の脳に構築されたゲーム制作のテンプレートはC#が前提になってるので、動的型付け言語に合わせるがキツかったりしました。

Godot 好きの方は当然、GDScript でも十分実用に耐えうる、型も書けるようになったし、そもそも必須と言ってる C# のその機能いらないんじゃないか? とか思われると思います。GDScript でのゲーム制作に慣れている場合はもちろんそう思うでしょうし、別に疑ってはいないのですが、結局自分の唯一であり莫大にある資産 C# の資産を捨てて、1から GDSript で今後ゲームを作っていけるかと聞かれるとそうでもないんじゃないかと思うわけです。ゲーム業界では C# ユーザーが爆発的に増えていて、経営的には当然経験の多い人を雇いたいので、Unity か C# を使ったエンジンを採用すると思われます(Capcom の RE Engine もスクリプトは C# で書くそうです)。

Godot 3.5 の Android バイナリがガバガバである

これに対応できないのが、最終的に Unity に戻る決定打になりました。先の理由のせいで、結局今は Godot 3.5 で開発することになります。そうなると気になるのはバイナリの中身です。Godot 4系は見てないのでわかりませんが、Godot 3.5 の APK の中身はひどいもんでした。dll はそのまま置いてありますし、なんなら res: を使う上で必要なんだと思いますが、スクリプトの構造も丸見えになっていました。

こんな状態では改ざんし放題ですし、なんなら社内資産も丸見えになってしまいます。国内ではそれほど盛んではないかもしれませんが、知り合いで APK をコピーされ、改ざんされ配布されたという話は Mono 時代の Unity ではよく聞きました。IL2CPP 環境になってから減ったみたいですが、それでも改ざん・再配布は常に商用ゲーム(少なくともモバイル向け)では天敵です。

.NET 8 で iOS/Android ともに AOT に対応されるみたいですが、それでも隠蔽や改ざん防止に役立つかは怪しいところです。良くも悪くも、オープンソースである以上 Godot も .NET も構造は解析されやすく、改造が容易になってしまいます。少なくとも期待はしていません。

まとめ

とういことで、少なくとも日本国内でのモバイル開発を前提とした場合、現状の Godot は実用に耐えない、というのが結論になります。今回 Unity の料金騒動でごたごたしたので、今後もまた必要にかられて新しく資産を作りなおす可能性は当然あると思いますが、少なくとも現状の Godot には大手を振るって大移動を促せるほどには成長していませんでした。また将来、Godot が実用に耐えうるか、また新たな面白いエンジンが出たら試そうと思います。

Discussion