Godot Engine を試す (C# / 3.0-alpha2)

ふと思い立って Godot Engine というゲームエンジンを試してみました。

Godot Engine とは

Godot Engine - Free and open source 2D and 3D game engine

MIT ライセンスで開発されているマルチプラットフォーム対応のゲームエンジンです。
「ごどー」と読むようです。

先日、スクリプトエンジンとして Mono を利用した C# 対応が発表されました。

Introducing C# in Godot

現在公開されている 3.0-alpha2 から Mono 版が使えます。 Mono 対応は Xamarin 側の協力があったっぽく、また VR/AR 対応なども行っているようです。
これは気になってきた・・・ ので試してみました。

インストールしてみる

3.0-alpha2 は下記の記事からダウンロードできます。

Mono 版は別途最新の Mono 実行環境のインストールが必要です (Windows でも)。デフォルトでインストールすればそのまま使えるようですが、インストール先の変更等をした場合は環境変数の設定が必要のようですので、そこだけ注意。

起動してみる

起動するとプロジェクト選択ダイアログが開きます。初めてなので新規プロジェクトを適当に作って開始。

f:id:tan-y:20171111230501p:plain

メイン画面。レイアウトや名称は違うのですが、意味的には Unity に似ています。レイアウト変更が自由にできるといいんですけどね・・・

f:id:tan-y:20171111230510p:plain

何かしてみる

とりあえず Cube を置いてみましょう。

まず右上の "Scene" タブを押し、 "+" ボタンを押してください。 (もしくは Ctrl+A)
初期状態ではルートノードがないのでとりあえず作ります (ルートがないといろいろ困りました) 。 "Spatial" を選んで "作成" を押してください。この中にさらにアイテムがありますが、 Spatial 自体も追加できるアイテムです。

f:id:tan-y:20171111230517p:plain

続いて Spatial の下に Cube を追加します。先程と同じ手順で今度は "MeshInstance" を追加します。

MeshInstance を追加しても画面上は何も反映されません。これは MeshInstance にレンダリングする Mesh が登録されていないためです。 Mesh プロパティが null なのでクリックして "新しい CubeMesh" を選択すると箱が画面に出ます。

f:id:tan-y:20171111232724p:plain f:id:tan-y:20171111232728p:plain

あとはカメラがないと実行しても何も出ませんので、 InterpolatedCamera を追加して適当な位置、向きを設定します。

ツリービューから探すのは面倒なので "Search" にテキスト入力すると絞り込みしてくれます。

Unity でいう Game ビューは Scene で InterpolatedCamera を選択し、画面に出ている "preview" を押すと表示が切り替わります。エディッター表示と Game ビューを同時に確認したいのであれば、画面上部の View を押すとビューポートが選べますので 2 つ以上を選択し、一方を Game ビューにすればよいかと思います。

f:id:tan-y:20171111230602p:plain

2 ビューポートに変えて下側を Game ビューにしてみます。

f:id:tan-y:20171111230524p:plain

スクリプトを書いてみる

ここからが肝心。 C#スクリプトを書いてみましょう。

まず先程追加した MeshInstance の名前を "Cube" に変えます。 MeshInstance は既定のクラスと存在しており、このままにしておくと後でいろいろはまります (バグっぽい) 。そして "Cube" で右クリックをして "Attach Script" を選択。そのまま C# で作成します。

f:id:tan-y:20171111230531p:plain f:id:tan-y:20171111230534p:plain

初期状態では次のように内蔵のスクリプトエディッターが開きます。

f:id:tan-y:20171111230541p:plain

ただ現時点ではコード補完がきかないのでとても不便です。ドキュメントを見ても C# での名前は C# らしいものに微妙に変更されており、正確な名前がわかりません。困った。
ですが、スクリプトの追加時に合わせて .sln, .csproj が生成されていたので .sln を Visual Studio で開いてみると、無事開くことができました。

f:id:tan-y:20171111230545p:plain

.csproj には Godot Engine のアセンブリが参照に追加されており、コード補完もきくので全く違和感なくコーディングができます。素晴らしい。
Godot に戻れば動的に反映がされていますので、正しく記述されていれば実行することができます。 _Process はご想像通り Unity の MonoBehavior.Update と同じようですのでここにあれこれ書くとよいでしょう。

public override void _Process(float delta)
{
    this.RotateY(delta);
}

とだけ書いて実行すると Y 軸を中心にくるくるまわります。これでなんとなく雰囲気がつかめました。

Mono でのデバッガは現状は未対応のようで、ブレイクポイントを設定しても止まりませんでした。

その他

Godot 3.0 からは glTF のインポートに対応しています。
Khronos の glTF Sample Models からサンプルを適当に入れてみたところほどほど読めているようです。 2.1 までは COLLADA だけのようです。 glTF はこれからのフォーマットですが対応が早いですね。

glTF のサンプルを配置してライトをちょっと入れてみたらこんな感じ。

f:id:tan-y:20171111230551p:plain

まとめ

Unity や UE4 を使うことに特に制約 (主にライセンス費用面で) がなく、とにかく製品開発をしたいのであれば他のエンジンは検討の余地ないと思いますが、 Unity, UE4 が使えないか技術的に興味があるのでしたら Godot Engine を一度さわってみると面白いのではないかと思います。
ただ 2.1 と 3.0 で大分変わるような感じもするので、今から始めるなら alpha でも 3.0 からの方がいいような気もします。てなると製品での採用は無理と思うので現状では研究、様子見でしょうか。