【雑記】Unityの代替として話題になりつつあるGodotを触ってみた【ゲーム開発】
発端
最近、Unityがライセンス変更の色々で燃えていたりしたニュースで移行先としてGodot(ゴドー)が上がっていた。
別件だが、CySharpの人のツイートでGodotというゲームエンジンがC#の対応がいい感じだという話も見かけた。
Microsoft公式のゲーム開発のオススメエンジンリストに乗っていたので、Godotの名前だけは知っていた。
そんなわけで、周りでGodotの名前をよく見かけるようになったので、ちょっくら触ってみるかと思った。
Godotのチュートリアルをやった感想
公式の2Dゲームを作るチュートリアルをやってみた。
https://docs.godotengine.org/en/stable/getting_started/first_2d_game/index.html
https://x.com/happy_packet/status/1706650948096217167?s=20
学習のためにスローペースで進めたが、大体3時間くらいで終わった。
ゲームエンジンが大体どういう存在かを過去にUnityで学んでいたので、すんなり理解できた。
独自スクリプトのGDScriptはPythonみたいなものなのでノリで書けた。
ただチュートリアルで移動イベントのベロシティ操作(移動の座標処理)のこのコード。
func _process(delta):
var velocity = Vector2.ZERO # The player's movement vector.
if Input.is_action_pressed("move_right"):
velocity.x += 1
if Input.is_action_pressed("move_left"):
velocity.x -= 1
if Input.is_action_pressed("move_down"):
velocity.y += 1
if Input.is_action_pressed("move_up"):
velocity.y -= 1
if velocity.length() > 0:
velocity = velocity.normalized() * speed
$AnimatedSprite2D.play()
else:
$AnimatedSprite2D.stop()
これは三項演算子的な書き方にしたほうが良いよと思った。
※まぁPythonの三項演算子もどきが見やすいかどうかは賛否あるが。
func _process(delta):
var velocity = Vector2.ZERO
velocity.x += 1 if Input.is_action_pressed("move_right") else 0
velocity.x += -1 if Input.is_action_pressed("move_left") else 0
velocity.y += 1 if Input.is_action_pressed("move_down") else 0
velocity.y += -1 if Input.is_action_pressed("move_up") else 0
if velocity.length() > 0:
velocity = velocity.normalized() * speed
$AnimatedSprite2D.play()
else:
$AnimatedSprite2D.stop()
一通り触ってみて感触は良かったが、円のシェイプが4.0では未実装だったり、イチからゲームを設計して作ろうと思ったときに欲しい物がまだ足りてないなと思った。
とは言え、欲しい物がなくても代替手段はあるのでどうにかできる。
未実装の部品が実装されていけば、開発がもっと楽々になりそう。
なにか作ってみたいよね
https://x.com/happy_packet/status/1708836776209698890?s=20
年末とかに時間とれたら、えっちなブロック崩しとか、脱衣ジャンケンゲームとか作ってみたい。
(プログラムよりは素材作りで時間が溶けそう)
余談
https://x.com/reduzio/status/1706984046784401784?s=20
機械翻訳`
この図は、Godot 4 GDExtension システムがどのように動作するかを示しています。
Godot 4 の C# は現在、古い Godot 3 専用の Mono グルー バインダーを使用しています。
C# を GDExtension に移行すると、コア エンジンで Glue/Mono バインディングが不要になり、エンジンの統合が可能になります。`
コアエンジンがMono依存から抜け出すことで、Monoに縛られていたC#も自由になるっぽいです。
UnityであったようなMono縛りから開放されると、ライブラリの選択肢も増える上にランタイム固有のバグが減るはずなので結構メリットがあります。
まだまだ発展途中っぽいですが、この変更はすごく好感があります。