Godotの入力の取得の仕方は、UnityのInputSystemにとてもよく似ています。
「プロジェクト設定」の中に「インプットマップ」というものが用意されています。
この図の様に、デフォルトで色々な設定がされています。
この辺り、UnityのInputSystemのUI設定に似たところがあるように思いました。
もちろん、この図の様に自分流のアクションを登録することも簡単にできます。
しかも、スクリプトで利用する時、Unityの様に専用クラスを作ったり、インスタンス化したりという手間は必要ありません。
何も追加しなくても、
func _physics_process(delta): if Input.is_action_pressed("move_right"): #このmove rightというのが、インプットマップで設定されたアクション。
この様に簡単に利用できます。
このあたり、Godotは「インプットマップ」を本気で主流にしようという意気込みが感じられました😆
次に、実際にGodotでゲームを作成するにあたって、大元になるノードについて纏めておこうと思います。
Unityではプロジェクトを作成するタイミングで、2Dか3Dかを選びますが、Godotはプロジェクトを作成する時にそのような選択はありません。
ゲームの材料になるシーン、UnityでいうとGameObjectを作成するときに、その元になるノードを選ぶ段階で2Dか3Dか選ぶイメージです。
2Dゲームを作る場合、2Dキャラを作成する元になるノードはArea2Dか、CharacterBody2Dのどちらかをコアに選ぶ様です。
Area2Dは子ノードとして、CollisionShape2Dノードもしくは、 CollisionPolygon2Dノードの様なCollision機能を持つノードが組み込まれることを前提とした作りになっていて、
デフォルトのシグナルとして、area_enteredとarea_exitedというシグナルが設定されています。
このシグナルは、上記のCollisionに他のObjectが侵入すると、area_enteredが発報し、Objectがエリアを離れるとarea_exitedが発報します。
ちょうどUnityの、OnCollisionEnterとOnCollisionExitの様な関係に似ています。
もう一つの選択肢であるCharacterBody2Dノード は、ユーザーが制御することを目的とした物理ボディに特化したノードで、
PhysicsBody2D ノードと、CollisionObject2Dノードを継承しており、キャラクターを移動させるのに便利なmove_and_slide関数を使うことができる様です。
3Dゲームを作る場合はまだ調べきれていませんが、CharacterBody3Dというノードがあるので、これをコアにするイメージみたいです。
次回から、早速、Unityで作成したゲームの移植に挑戦してみようと思います。