Godot Game Engine を使う10の理由

# Godot Game Engine を使う10の理由
![スライス1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192562/0d0a6a03-92cd-23fe-0abe-6586ed664e38.png)


という記事があったので、要約してみた。
(無断翻訳につき、指摘があったら記事を消させていただきます)

>元記事: 10 Reasons to Use Godot Engine for Developing Your Next Game
https://www.makeuseof.com/tag/reasons-godot-engine-game-development/

### 1. Godotはプログラマにとって使いやすい
Godotエンジンのほぼすべての機能はコードからアクセスできる。

### 2. 専用言語GDscriptがある
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192562/88285abf-7f9d-115a-73bb-004775d686af.png" width="80%">
GDscriptはGodot開発チームが試行錯誤の結果作り出したもので、以下の特徴を持つ。

- pythonをベースとした読みやすい構文
- ゲーム開発に不要な構文の削ぎ落とし
- GDscriptエディタがエンジンに統合されている
- スピードの最適化

わざわざ専用言語を作ったのには理由があり、GodotEngineではゲームを最適化するため
独自のメモリ管理やAPIを実装しており、既存のスクリプト言語の実行環境がこれらと競合してしまうため生み出されたのがGDscriptだとか。

ゲームを作るために新しい言語を勉強するのが手間だと思う人は結構多いと思うので、
比較的簡潔でシンプルなpythonをベースにしているのが嬉しいところ。


### 3. C# や ビジュアルプログラミングもできる

Godot Engine のエディタ上で使えるスクリプトの選択肢は、以下の3つ

- GDScript
- C# (Mono version)
- Visual Script


[ビジュアル・スクリプト入門 — Godot Engine latest ドキュメント](https://docs.godotengine.org/ja/latest/getting_started/scripting/visual_script/getting_started.html)

Visual ScriptはGodot3.0から追加された機能で、
画像編集や動画編集で使うようなノードを、ドラッグ&ドロップで連結してプログラミングを行う。

非プログラマがゲームを作りたいなら一考してもいいかもしれない

### 4. 他言語バインディング
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192562/44eeab86-3da5-579a-d508-d4116f869cac.png" width="80%">

基本的にはGDScriptで開発したほうができることの幅が広いが、
C/C++, Go, Rust, Ruby, Pythonなどの主要な言語へのGDNative APIバインディングが存在し、
共用ライブラリをビルドしてGodot Engineで呼び出すことができる。

- 慣れ親しんだ言語を使う
- ネイティブコードを生成して、部分的な最適化をする
- 静的型付けの言語を使うことでバグを少なくする

といったメリットがある。

### 5. Nodeシステム
GodotでのゲームオブジェクトはNodeと呼ばれる。

その他多くのゲームエンジンと同様に、Godotも **Scene System** を採用するが、
Scene自体もNodeであり、複数を寄せ集めて
さらなるまとまりとしてのSceneを作ることもできる。
![image alt](https://static.makeuseof.com/wp-content/uploads/2019/04/godot_nodes_670-670x233.png)

GodotでのSceneは、Unityで言うところのSceneとPrefabを兼用する。
ゲームオブジェクト単体レベルでシーンを切り分けて開発できるので、
エラーの問題部分の切り分けや、複数人開発に有効だろう。

### 6. 2Dも3Dもどっちも開発できる
![2d.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192562/7a5d3f07-bf59-ef7e-fcbe-6e79343cde97.jpeg)
Godotの2Dゲームは、3Dを擬似的に2Dに寄せたものではなく
pixelの2D空間に展開されるので、かなりパフォーマンスが最適化される。

3D機能はUnityやUE4に遅れを取っているらしいが、[GodotのGihubリポジトリ](https://github.com/godotengine/godot) は更新がかなり頻繁にある。
既存のゲームエンジンの良い部分を取り込むスタンスなので、追いつくのも時間の問題だろう。

### 7. OpenSource
商用フリーなMITライセンス

- 売上をゲームエンジンの開発元に支払う必要がない
- Godot Engine 自体が拡張性が高く、必要な機能を自作することもできる

UnityやUE4は、儲かってくるとロイヤリティを仕払わなければならない。
Godotを採用するだけで、著作権表示とMITライセンスの全文の記載さえ守れば
無料で使える。

### 8. 自前のIDEがある
VScode live share のようなクールな機能はないが、Godotで使うのに理想的な
コードエディターを内蔵する。もちろん、自分の好きなIDEやeditorを使える。

### 9. Godot Engineはとても軽量
Godot Engineの実行ファイルは60MBくらいしかない。
複雑なインストールの必要もなく、zipを解凍してアプリを実行するだけ。

また、Godot Engine自体が、GodotAPIを利用して作られた
Godot Gameの1つである。

開発環境の軽さ = 実行環境の軽さ であるということ。


### 10. クロスプラットフォーム
Godotはwindows, macOS, Linuxにインストールできる。
ios, androidに向けてビルドできる。
(※ゲームコンソール向けは公式にはサポートしておりません。[document link](https://docs.godotengine.org/en/3.1/tutorials/platform/consoles.html))

GUIアプリケーションだけでなく、CLI向けにビルドできるので
linuxサーバー向けにビルドして、マルチプレイヤーゲームのホストサーバーにすることもできる。

## GDNative
ネイティブコードを書いて利用できるという面白い機能があるらしいので紹介。

公式サイト
https://godotengine.org/article/dlscript-here
公式リファレンス GDNative C example
https://docs.godotengine.org/en/3.1/tutorials/plugins/gdnative/gdnative-c-example.html?highlight=gdnative


Godotでゲームオブジェクトをプログラムで操作する方法は3通りある。

- GDScript
- VisualScript
- GDNative

これらのうち、GDNativeとはC/C++, Go, Rust, Nim などの言語向けに
公開されているGDNative API Libraryを使ってバイナリをビルドし、
それをGodot Engineで共有ライブラリとして読み込むというものである。

![image alt](https://godotengine.org/storage/app/media/dlscript/godot_dlscript_thirdparty.png)

**GDNativeでできること**

- GDScriptと同じことをより高速に実行する
- サードパーティのコードを呼べる
    - Steamworks(Steamへゲームを出品するための登録システム)
    - GooglePlay 
    - etc
- 好きなIDE・エディタでGDNative共有ライブラリを作れる

GDScriptもある程度高速に動作するとはいえ、ネイティブコードを実行したほうがマシンパワーを最大限に活かせる
GDScriptでプロトタイピング、GDNativeで最適化という使い分けが有効かも

**GDNativeでできないこと**

- Godot Engine自体のハック  

GDNativeはあくまでGodotAPIを操作するだけ。
そのAPI自体を改変することはできない。
基本的にはGDScript以上のことはできないっぽい。



## 良くないところ
個人的に感じたデメリットは、

- 日本語情報が皆無
- UnityやUE4のように、AssetStoreの豊富な資源がない
    - 代わりに、AssetLibraryなるものがある
- UnityやUE4で築かれた数々の開発ノウハウが通用しない
    - ゲームロジック的な部分はGodotでも流用できると思う
- Godotを採用して大ヒットしたAAAゲームがない

ただし、初版がリリースされたのが 2014年なので
Unityの初版が2005年、UE4が2012年であることを考えると
後発のエンジンなので利用例はこれから増えていくかも。
(時間が解決する)


# 個人的所感
- 疑似2Dではなく、独立した本物の2Dエンジンを使ってるのがいい
    - Unityは3D空間に板ポリを描写してるっぽい？
    - Godotの2Dエンジンのほうが最適化されてそう
- Pythonが好きなので、GDScriptも行けそう
- オープンソースで真の完全無料なエンジンなのが好印象
- インディー向けだとUnityからGodotに乗り換えてる人も結構いる感じ