【Godot】Godot Engineを使ってみよう

# ■はじめに
最近Unityが"Runtime Fee"ってのを導入して、Unityに対しての不満が多く飛び交っているので、Unity以外でもゲーム作っといた方が仕事とかで役立つかなと思って、この記事を書いてます


## ●Godotについて
- 2014年リリース。UnityやUEと比べると、比較的新しいゲームエンジン
- **利用料金なし。完全無料**([ 詳細 ](https://docs.godotengine.org/ja/stable/about/faq.html#what-can-i-do-with-godot-how-much-does-it-cost-what-are-the-license-terms))
- Windows,Macに加え、Web上やAndroidでも開発できちゃう
- 2D/3D対応
- **コンソール以外**ビルド可能 ([詳細](https://docs.godotengine.org/ja/stable/tutorials/platform/consoles.html))
- プログラミング言語は、**Godot専用のGDScript**というものや、**C#、C/C++、D、Kotlin、Rubyなどの多様な言語**がある([ 詳細 ](https://docs.godotengine.org/ja/stable/tutorials/scripting/gdnative/what_is_gdnative.html#doc-what-is-gdnative-third-party-bindings))
    - GDScriptに関しては、Godot内で完結できるそう。(C#などの言語は、VSCodeなどのコードエディタが必要)

### ・GDScriptについて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/9b74823f-8e20-5556-5568-a58b70433787.png)
([画像引用元](https://docs.godotengine.org/ja/stable/getting_started/step_by_step/scripting_languages.html))

- **Godot専用の言語。Python風のシンプルな構文っぽい**
- コンパイル時間短め
- マルチスレッド対応
- ガベージコレクション未使用

# ■使ってみる
## ●ダウンロード
こっからダウンロードできます。
C#を利用したい場合、.NETエディションをダウンロードする必要があります

https://godotengine.org/download/windows/

https://godotengine.org/download/macos/

また、Web上でも起動できます。
(起動するには、作成済みのプロジェクトのzipファイルを用意する必要があります)

https://editor.godotengine.org/releases/4.1.1.stable/godot.editor.html

## ●起動
こっからは、公式ドキュメントの方が分かりやすいかもです

https://docs.godotengine.org/ja/stable/getting_started/introduction/first_look_at_the_editor.html

### ・プロジェクトの新規作成
1. プロジェクトマネージャーの[`New Project`]ボタンをクリック
1. プロジェクトのディレクトリを作成(※空のフォルダである必要があります)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/b992ce34-1743-94fa-75ae-d5930b088ead.png)
    - `ProjectName`：プロジェクト名
    - `ProjectPath`：パス。[`Browse`]でディレクトリ参照
    - `Renderer`：レンダラーの選択。お好みのものを選択。(基本的に左のでいいと思う)



### ・既存のプロジェクトのロード
1. プロジェクトマネージャーの[`Import`]ボタンをクリック

1. 作成したプロジェクトフォルダ内の、`.godot` という拡張子のファイルを選択して[`Open`]ボタンでロードできます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/6bc8d4df-bc1e-a4e3-520b-43c35c998d21.png)

## ●Unityとの仕様の違い
### ・基本要素
https://docs.godotengine.org/ja/stable/getting_started/introduction/key_concepts_overview.html

- **シーン**：**SceneとPrefabが混ざった感じ**。
- **ノード**：Component的な役割
- **シーンツリー**：HierarchyView的な役割
- **シグナル**：OnColliderのようなコールバック的な役割


### ・画面構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/546effe4-4151-313c-4967-ad99ceb3558c.png)

1. **Scene Dock**：Hierarchy View的な役割。**シーンの操作**をする
1. **FileSystem Dock**：Project View的な役割。**ゲームの素材の管理**をする
1. **Inspector Dock**：Inspector View的な役割。**選択されたシーンの操作**をする
1. **WorkSpace**：Scene ViewとGame Viewの併用ビュー(2D/3Dってやつ)の操作や、GDScriptの編集ができる。
    - **画面中央上部から、2D, 3D, Scriptなどを切り替えられる**
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/be6f3e77-c151-1207-88ad-b405f37e70d0.png)
    - **AssetLib**：UnityでいうところのAssetStore

## ●プロジェクトの実行
https://docs.godotengine.org/ja/stable/getting_started/step_by_step/nodes_and_scenes.html#running-the-scene

Godotには、UnityのGameViewのような存在がなく、実際にゲームのウィンドウを実行して確認します。

エディタの右上に実行関係の機能がまとまってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/a9ed9688-9ac2-ecf1-e19e-bbc2055a7543.png)

- **Play** (`F5`)：プロジェクト自体を実行する
- **PauseScene** (`F7`)：一時停止
- **Stop** (`F8`)：終了
- **PlayScene** (`F6`)：現在選択中のシーンを実行する
- **PlayCustomScene** (`Ctrl + Shift + F5`)：プロジェクトフォルダ内にあるシーンを選択して実行する

## ●GDScriptをいじってみる
下記の公式ドキュメントを参考にしながら、GDScriptに触ってみます

https://docs.godotengine.org/ja/stable/getting_started/step_by_step/scripting_first_script.html

1. まず、プレイヤーのシーンを作成しましょう。
    - FileSystem Dock上で、右クリックして[`New Scene`]を選択して作成します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/8cf7f491-c07b-7513-f4f2-1d48e6f9623e.png)

1. 次に、プレイヤーを表示するために、Spriteノードを追加しましょう。
    - Scene Dock上で、[`Other Node`]を選択して、`Sprite`を選択します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/1cb9a8be-31df-d425-4b2d-bc940ad8ba6d.png)
1. Spriteノードの`Texture`という項目に、適当なテクスチャを適用する
    - 適当な画像を持ってきて、FileSystem DockにD&Dでテクスチャをプロジェクトに追加します。
    - その画像を`Sprite`ノードの`Texture`にD&Dして適用します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/6e460ba2-2487-78cf-652f-43056c886c77.png)

1. 次に、スクリプトを作成します
    - Scene Dockの右上のアイコンをクリックして追加できます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/4de2e837-6aa3-6872-18d4-cc8e50af55df.png)

1. 下図のような画面が表示されるので、このまま[`Create`]で作成する
    - [`Language`]で使用する言語を選択できます。(今回はGDScript)
    - [`Inherits`]で基底クラスを選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/bdbd1d73-7c4a-2414-b9fb-895eecbbc7b0.png)

1. こんな感じのコードを作成する
    公式ドキュメントの例にならって、回転スクリプトを作成してみます
    (本来の`.gd`という拡張子を便宜上`.py`としています)
    ```Player.py
    extends Node2D
    
    var moveSpeed = 400
    var rotateSpeed = PI
    
    # Called when the node enters the scene tree for the first time.
    func _ready():
        print("Hello world")
    
    
    func _process(delta):
        rotation += rotateSpeed * delta

        var vel = Vector2.UP.rotated(rotation) * moveSpeed
        position += vel * delta
    ```
1. F5でプロジェクトを実行して、回転することを確認
![Test_1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/c225549a-6e60-5a8b-9df2-6bc0a2631971.gif)


## ●プロジェクトをエクスポートする
まず、エクスポートするにはテンプレートというものをインストールする必要があるそうです

https://docs.godotengine.org/ja/stable/tutorials/export/exporting_projects.html#export-templates

また、アイコンを変更する場合、Rceditというものが必要だそうです

https://docs.godotengine.org/ja/stable/tutorials/export/changing_application_icon_for_windows.html?highlight=rcedit#changing-the-file-icon


1. ツールバーの`Editor`の`Manage Export Templates...`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/4e9f1bed-02fc-a8b7-df88-fd21027cdfb4.png)

1. このように表示されたら、`Download and Install`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/806589bd-0c75-b501-4bfa-8171ada7c11e.png)

1. インストールが完了したら、ツールバーの`Project`の`Export`を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/60c21568-bdb4-b469-53de-a64862fdf618.png)

1. 上部あたりの`Add...`をクリックして、プラットフォームを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/bfad5a7e-e397-bf37-98f7-23b0c42b30b1.png)

1. とりあえずビルドさせたい場合、[`Modify Resources`]という項目を`Off`にする
    - アイコンなどを変更したい場合、`On`でないといけないっぽい。
    - **アイコンの変更は何故かクッソ面倒な感じなので、後々紹介する予定です**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/3002d034-5344-11a0-6995-5f2de3ebe542.png)


1. [`Export Project`]をクリックして、エクスポート先のディレクトリ選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2419795/bd873d1e-6659-2f4a-5be5-272a748cdca7.png)

これで、指定したディレクトリを確認すると、.exeファイルができているハズです！
**(エクスポート時に、プログレスバーが閉じるの早すぎて完了したか分からないけど、ビルドできてます)**



# ■さいごに
エクスポートの設定とかが面倒だったりして、慣れるまで時間がかかりそうですが、頑張りましょう…！

## ●参考サイト
### ・公式ドキュメント

https://docs.godotengine.org/ja/stable/getting_started/introduction/introduction_to_godot.html

https://docs.godotengine.org/ja/stable/getting_started/introduction/first_look_at_the_editor.html