Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

Unity使いがGodotを触ってみた感想を率直に語る!

GODOT Game Engin_Cover

 最近話題のオープンソースゲームエンジンGodotをとうとう触ってみたので、その率直な感想を書いてみたいと思います。はっきり言って、Godotかなり良いです!『Unityでインディゲームを作る!』というタイトルのブログをやっていますが、Godotに肩入れしたくなるほどには、かなり良い印象を持ちました。

 

 なお、今回のレビューについては、ファースト・インプレッションを大事にしたいという狙いがあるので、そこまで深くGodotを触っていません。公式の2Dゲーム・チュートリアルを終え、2Dに関する主要な機能をとりあえず使えるようになったくらいです。期間としては大体一週間程度でしょうか。

 なので理解が足りない部分が多くあるはずですが、あくまでファースト・インプレッションという点をご了承ください。Godot 4.1.3を使用しています。

 

Godotとは!?

 現代において一般人も使うことのできる代表的な汎用ゲームエンジンと言えば、UEとUnity、そしてGodotになるかと思いますが、Godotについて自分は名前こそ知っていたけれど、一度も触ったことがなかったのでした。ここ数年Unity一筋、というか自分はそもそもゲームエンジンを触り出したのもUnityが初という来歴です。

 

 これには理由があって、単純にUnity以外のゲームエンジンを触っている余裕が時間的にも精神的にもなかったというのがあります。Unityの使い方を覚えるのに精一杯だったし、他のエンジン触るならUnity触っとけよ、という話です。

 あとGodotを『簡易』ゲームエンジンのようなものだと思い込んでた、ということもあります。今回、触ってみて、いや全然色んなこと出来るし機能性十分じゃん!と正直驚きました。3.x以前がどうだったのかは知りませんが、Godot 4.1.3はしっかりしたゲームエンジンでした。

 

 Godotはオープンソースで無料で使うことができ、ライセンスフリーであり、これで作ったゲームは完全にあなたのモノであることを謳ったゲームエンジンです。自分はUnity Asset Storeなどを含む、巨大なUnityコミュニティを頼りにしたかったのでUnityを使い始めたわけですが、自分で色々出来る人にしたらGodotを使わない理由が無いように思えます。

 

Unityとの違い

 Unityとの比較論となると、抽象度が違う、という言い方が相応しいのかもしれません。GodotはUnityよりもゲームの構造に対して、もっと抽象度を高く捉えていて、それがより直感的な使い心地を生んでいると思います。

 

 どちらも結局は『汎用ゲームエンジン』なのであり、出来ることやユーザーがゲーム制作において繰り返していく作業に本質的な違いが出るわけがありません。ゲーム構造への切り口や捉え方が異なっていて、それが使い心地を違うモノにしている、ということです。(もちろんUIの違いもありますが)

 

 具体的な差異で言えば、UnityではGameObjectという入れ物に色んなコンポーネントを組み込んで、様々なオブジェクトを作り、時にはそれをPrefabにして、ゲーム空間であるSceneにそれらを満たしていくことでゲームを構成しようとします。

 それに対して、GodotはとにかくSceneにNodeをツリー構造として組み込んでいき、そのScene同士でツリー構造を作り、それをゲームとする、というエンジンです。

 

 ここで注意が必要なのはUnity SceneとGodot Sceneでは微妙に立ち位置や扱いが異なるという点です。GodotのSceneはSceneとしても使えるしPrefabのようにも使える、UnityのSceneよりも柔軟な(抽象度の高い)存在であり、Sceneファイルを読み込んでInstantiate(生成)する、というPrefabのような使い方もされます。個人的には、Sceneという単語から生まれるイメージに反する概念だと感じます。

 つまり、GodotシーンはSceneでもあるし、GameObjectのような働きもするということになり、これはUnity使いからすると混乱します。GDObjectとかにした方が良くない?とか思いつつも、自分としては『面白い』扱い方だなとひとまず飲み込みました。

 Unity視点からすれば、Unityゲームの三大構成要素であるScene、GameObject、コンポーネントをGodotではより抽象化し、ゲーム構造を更に単純化していると捉えるべきなのかなと現状考えています。

 

 Godotでは全てはSceneによって構成されており、SceneはNodeのツリー構造によって構成されている、ということです。ここでNodeとはなんなのか、ということになりますが、Unityのコンポーネントのようであり、しかし、そのまま独立して存在もできるので、GameObject的な性質も持っていることになります。

 自分としては、必要なコンポーネントを組み込み済みの既成のGameObject、というのがGodotのNodeに近い存在かなと思いました。UnityはどんなコンポーネントもなんらかのGameObjectに組み込まなければいけないので、ここはかなり大きな違いです。

 

 Godotは抽象度が高いというのはこういうことで、Unityよりもゲーム構造が簡略化されており、よりモダンで軽快なUXになっています。エディター自体も軽量で良いですね。少なくともちょっと触る分にはGodotの方がかなり直感的に素早くゲームを作れるだろうなと思いました。ここはある程度大きくて複雑なゲームを作った時にどうなるか、という懸念もあるかとは思います。しかし、現状の自分ではそこは分かりません。

 

GDSciptが最高だった件

 GDScriptとはGodot独自の専用スクリプト言語です。独自言語とかめんどくさいし、覚えても潰し効かなくない?と思ったソコのあなた!自分も最初はそう思っていました。しかし、その統合性の高さと使いやすさ、学習曲線の高さはGodotを使う理由にすらなるくらいです。

 公式ドキュメントに『とりあえず3日間試してくれ!良さが分かるから!』と書かれていますが、この言葉を信用してぜひ使ってください。UnityでC#を使っている人なら、チュートリアルを通してすぐに覚えることが出来るはずです、たぶん。

 

 自分はGDScriptに対しての興味はあまりありませんでしたが、評判が良いしせっかくGodot触るならまぁ・・・という程度のモチベでした。正直、あるゲームエンジンを試しに触るとして、その専用言語を覚えようという気になる人はほとんどいなくて当然ではあります。

 しかし触り始めて2日目ほどで、いやこれはむしろC#よりも良くね?というほどになりました。今では、GodotでわざわざC#使う意味なくね?なんかメリットあるの?くらいに思います。

 

 それくらい使いやすくGodotとの統合性も高いんです。動的言語についてはPythonをちょっと触ったことがある程度でしたし、Pythonも特に好きな言語でもなかったのですが、このGDScriptの抽象度の高さがスクリプト言語としてはやっぱちょうどいいんですよね。Python風とされていますが、Luaの影響も受けており、自分はLuaに興味はあったのでGDScriptに触って結果的にかなり良かったです。

 

 UnityにおけるC#もかなり良いんですけど、ちょっとしたことをやろうと思った時にC#がやや重たい(処理が重い、という意味でなく)時があるのは事実です。GDScriptならちょっとしたことを本当にちょっとしたコードで書けるようになります。

 もちろん動的言語のパフォーマンスについては考慮する必要はありますが、それについてはGodotはC++を使うこともできるので、そこは簡易ゲームエンジンではないということです。

 

 というわけで、自分のGodotについての良い印象の半分くらいはGDScriptが占めている、ということが伝わればなと思います。

 

Godotをサブエンジンとして

 『Unityでインディゲームを作る!』というブログをやっていることのアイデンティティが揺るぎそうですが、Godotをサブエンジンとして採用することは確定しました。

 

 2023年のRuntime Fee問題という悲しい事件が起こった時、自分としては結構リアルに目の前が真っ白になりました。かなりUnity使えるようになってきてて、いよいよゲーム作るぞーー!となった時に、Unityの将来を危ぶむ事態になって正直落ち込みました。

 『ひとつのツールに依存しすぎるのが悪い』『永遠に存在するソフトウェアなんてない』というのは正論ではあるんですが、色々使うよりも一つのツールを使い続けて練度を上げることによって得られるモノも実際あるじゃないですか。とは言え、今回の件でUnityに何かがあった時はどうするか、という問題について考えざるを得なくなりました。

 

 Runtime Fee問題は一応の決着を迎えたとは言え、汎用ゲームエンジンを巡る状況は色々な観点から楽観視できないものになったと思います。なので、保険的な意味合いからもGodotをとりあえず触ったわけですが、Godot自体との出会い以上に思ってもみない収穫もありました。

 

 それは自分で思っていた以上にGodotを使えるようになるまでのスピードが速かったということです。これはGodotのUI/UXがかなり良い、ということもありますが、単純に自分の中のある、Unityでの経験が活きたということだと思います。

 『Unity(ゲームエンジン)だけ使えてもしょうがない』とはよく言われていることですが、ゲームエンジンとは乱暴に言えば、ゲームで良く使われる機能の集合体なのであって、Unityも当然汎用的な機能を汎用的な形で提供しているのであり、それらを真に使いこなせるならば、普遍的な能力は身に付いているはず、と思うのですがどうでしょうか?

 

 例えば、UnityにはPro Builderという3Dモデリング・ツールやグラフ形式のシェーダー作成ツールShader Graphがありますが、自分はBlenderモデリングやシェーダー制作の基礎力を鍛えたことでUnity内でこれらのツールを使えるようになりましたし、そして、またUnityで覚えたことをGodotでも活用出来たのです。

 

 つまり、『Unityだけ、ゲームエンジンだけ使えてもしょうがない』のではなく、Unityの各機能を使いこなせるようになれば、ちゃんと他のソフトでもその経験は活かせるのだ、と確証を得られたのです。もちろん現実的にはUnityの全ての機能に汎用性があるわけではないでしょうが、それでもUnityを使い続けてきたのは間違いではなかったなと思いました。

 なので、Godotをサブエンジンとして少しずつ触っていくとは思いますが、今後も間違いなくUnityをメインエンジンとして使っていくつもりです。なので『Unityでインディゲームを作る!』というスタンスは変わりません。それはUnityにきちんと向き合えば、その経験がGodotにも活かせると分かったからです。

 

まとめ!

 Godotについて、ひとまず触ってみた感想をまとめました。サブエンジンとしては迷いなく採用です。Unityとは異なる考え方を持ったゲームエンジンに触ったことで、視野も広がりました。

 UnityのRuntime Fee問題はUnity使いとしてはもう大ダメージを喰らう事件だったのですが、結果としてGodotにスポットライトが当たったことはインディゲーム界にとっては良かったことだったのかもしれません。

 

 というわけで、Godotについては一区切りついたので自分はUnityに戻ります。2Dゲームを遊びとしてGodotで作っていくかもしれませんが、あくまで本ブログの本懐はUnityでのゲーム制作です。また気持ちを新たにして目標に向かっていきたいと思います!