👾

Godotを始めて触ってみた(2D, SVGアイコンを動かすだけ)

に公開

ゲーム制作についてはUnityを触ってきた。
無料でゲームを作りたい人にとって、Unity VS Unreal Engineみたいな構図がずっとあったが、最近はGodotというのが人気らしい。

Godotの立ち位置

Geminiに概要を聞くとこのように帰ってきた。

違いまとめ

  • Unity: 汎用性が高く、アセットや情報が豊富で2D・3D・モバイルなど何でも作れる業界標準。
  • Unreal Engine: 高品質な3Dグラフィックスに特化し、大規模・美麗なゲーム開発に向く。
  • Godot: 完全無料・オープンソースで、動作が非常に軽く2D開発に強い。

まあ概ね体感のイメージで、”オープンソースでUnityみたいなかっちり感はないけど、手軽で、2Dゲーム開発にはいいよね”みたいな。
ただ調べたら3Dも作れないわけではないみたい。

御三家での3D開発比較

  • 開発性能: 独自の描画エンジンで、個人のPCでもサクサク動く軽量な3Dゲームが作れます。
  • 機能: 物理演算やアニメーションなど、3Dに必要な基本機能はすべて標準装備されています。
  • 強み: 複雑な設定なしで、ボタン一つで3D空間にリアルな影や光を表現できます。

2Dプロジェクトを動かしてみる

とりあえず公式からMacBookにダウンロードしてみた。

OSSらしくAppStoreから落とすわけではないらしい。

Create Newを押すとこの画面。Version Control MetadataとしてGitを使うかどうかを選べるのがOSS文化っぽくてテンション上がります。
オプションを「Git」にしておくと勝手に.gitディレクトリなどを作ってくれるようです。

立ち上がりは結構遅いかも。10秒くらいかかりました。

まずは2D Sceneの作成から。画面左上から「2D Scene」ボタンを押し、2D Nodeを作成。
このNodeを基本単位に(つまりゲームを構成するキャラクターや敵、アイテム、弾やエフェクト)開発を進めるらしく、UnityでいうところのGameObjectと理解した。

GeminiにUnityとの違いをまとめさせると次の通り。

  1. 単体で機能を持つ: Unityのようにコンポーネントを後付けせず、最初から「カメラ」「ライト」などの役割が決まったノードを選んで使います。
  2. 親子で組み立てる: 親ノード(体)を動かせば子ノード(手足)も付いてくるという、ツリー状の親子関係でゲームの仕組みを作ります。
  3. すべてがシーンになる: キャラクターや弾などの「部品」も一つのシーンとして保存でき、それを他のシーンへノードとして自由に配置できます。

1.カメラやライトのような当たり前の機能をcomponentではなく、初めから別個に扱うのは合理的。
2.についてはUnityと変わらないような......。

3.はイマイチ理解が追いつかない。

詳しく聞いてみた。

  • 境界線がない: Unityでは「Scene(場面)」と「Prefab(部品)」は別物ですが、Godotではどちらも全く同じ「.tscn」という形式です。
  • 入れ子構造: 「敵シーン」を作って保存したら、それを「ステージシーン」の中に一つのノードとして何個でも放り込めます。
  • どこでもテスト可能: ステージ全体を動かさなくても、作った「敵シーン」だけを単体で再生して動きを確認できます。

とりあえず左下のFileSystemというエリアからicon.svgを画面にドラッグして配置。

左上のエリアSceneの配下にIconが作られた。

これにScriptを設定してみよう。
右クリックでAttach Script -> Path[1]を設定してLoad

icon.gdというファイルを作りました(画面左下のFileSystemエリアに作られる)。

上側の切り替えタブからScript(巻物のマーク)に切り替え、コードを書きます[2]

icon.gd
extends Sprite2D


# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
	if Input.is_action_pressed("ui_right"):
		position.x += 200 * delta
	pass

プレイするには画面右上にある再生ボタン("Run Project", Command + B)を押す。

このように別画面でプレイするスタイルらしい。
右キーを押すとアイコンが動くようになった。

使ってみた印象

  • UIはシンプルで好き。増築を重ねた感じのヘビーな外観(構造的にもだが)のUnityよりは良い
  • 思っていたほどクセがなく、Unity使いからでも意外とすんなり慣れることができそう

3D編もまたアップしたい。

脚注
  1. Pathはルートフォルダをres://...として作られる。res = Resourceの意味。ちなみにScriptファイル(.gdファイルという独自言語GDScriptの拡張子)の名前もPathの項目で書くスタイル。 ↩︎

  2. 関係ないけど、ZennのコードブロックはGDScriptのハイライトに対応していないらしい(似た記法のpythonをハイライトさせて対応する) ↩︎

Discussion