🎮
Unity 使いのための Godot 入門メモ
Unity 使いのための Godot 入門メモ
Unity で培った感覚を Godot 4 系にスムーズに移植するための対比リファレンス
項目名は Unity 側の用語で統一し、右に Godot の対応概念を示します。
1. 基本レイヤ
Unity | Godot 4 | 備考 |
---|---|---|
GameObject / Component | Node(単一クラスが両者を兼ねる) | Node はツリー上の単位。複数スクリプトをアタッチする発想はなく、継承で機能を増やす。 |
Prefab | PackedScene (.tscn) | インスタンス化は packed.instantiate() / 親へ add_child() . |
Scene (階層の保存) | Scene (.tscn) | Unity の Prefab+Scene を兼ねる。エディタ上で分割自由。 |
MonoBehaviour | Script (GDScript / C# / C++) | 1 Node=1 スクリプトが原則。 |
SerializeField | @export var value |
インスペクタ公開。初期値を付ける場合は = 10 . |
[Header] / [Tooltip] |
@export_category("Header") / @export_description("text")
|
4.2 以降の GDScript 注釈。C# は Export(PropertyHint.None, "説明") . |
ScriptableObject | Resource (.tres / .res) | 独立データ資産。Resource.new() /ロードは load() . |
Singleton (DontDestroyOnLoad) | Autoload (Project Settings → AutoLoad) | グローバル変数・シングルトンの登録場所。 |
ポイント:
- Prefab(Unitu)≒Scene(Godot)だが、Unityでよくある「シーン上でprefabいじって、良さげになったからApplyして全箇所に反映」みたいなことはできないので注意
2. ライフサイクル対応
Unity | Godot 4 |
---|---|
Awake() |
_enter_tree() (ツリー追加直後) |
OnEnable() |
_ready() 内で visible = true など |
Start() |
_ready() (全子ノードが揃った後) |
Update() |
_process(delta) |
FixedUpdate() |
_physics_process(delta) |
OnDestroy() |
_exit_tree() |
コルーチン (StartCoroutine ) |
await (asyncキーワードはない) |
ポイント:
- コルーチンはC#のように外側からキャンセルする仕組みがないので注意
- アニメーションで割り込みとかキャンセルを手軽に実現するなら
Tween
を使うと良いゾイ - issueでも議論されてたしそのうち実装されそう。
- アニメーションで割り込みとかキャンセルを手軽に実現するなら
- Godot の
_ready()
は「子を含めた初期化」が完了した時点で 1 回だけ呼ばれる - ウィンドウのサイズ変更初期化などは_enter_tree()で書くのが無難
- 各コンポーネントのレイアウトが決定される前に実行する必要があるため
3. インスタンス生成と参照渡し
Unity
var go = Instantiate(prefab, parent);
Godot
@export var enemy_scene: PackedScene
func spawn_enemy():
var e := enemy_scene.instantiate()
add_child(e) # 親ノードへ追加
e.global_position = Vector2(100, 100)
- インスペクタで
enemy_scene
に.tscn
をドラッグすれば Prefab と同じ感覚で差し替え可能です。 -
var e := enemy_scene.instantiate() as Enemy
みたいにキャストも効きます。ルートノードのスクリプトが取れる。
4. シリアライズと Inspector
- 外部参照・定数公開は
@export
。 - Node 参照をドラッグでセットしたい場合:
@export var target: Node2D
-
SerializeReference
のようなポリモーフィズムを持つ特性はVariant
(動的型)で表現できますが、型安全を求める場合はRefCounted
基底クラスを自作し登録するのが一般的です。
5. イベント/シグナル
Unity | Godot 4 |
---|---|
C# event / UnityEvent / SendMessage |
Signal (signal hit(damage) ) |
インスペクタでコールバックを紐づけ | エディタの Node タブ → Signals で接続 |
OnCollisionEnter |
body_entered シグナル |
Godot の signal はネイティブでスレッドセーフ&非同期発火可能。
6. Input システム
- Unity Input Manager → Project Settings → Input Map でアクション名を定義。
- コード側は物理キーを参照せず
Input.is_action_pressed("jump")
を使用 -
新 Input System 相当のリバインド UI は
InputMap
のランタイム編集で実装可能
7. コルーチンと非同期
Unity | Godot 4 |
---|---|
StartCoroutine(MyRoutine()) |
await MyRoutine() / yield(signal)
|
WaitForSeconds(1) |
await get_tree().create_timer(1.0).timeout |
DOTween / LeanTween などの簡易 Tween | create_tween().tween_property(...) |
Godot の Tween
はシーケンス API が標準搭載。SceneTreeTimer
と組み合わせれば大半のコルーチンワークは置き換え可能です。
8. UI システム
対応はあるけどGUI側での設定に慣れるまでちょっと大変だと思いますが
Godotは各種便利Nodeがあり、例えばItemList
は「スクロール+グリッドレイアウト配置+トグルボタン」がセットになっており、そのままアイテム一覧に使えて便利です。
-
RectTransform → Control ノード
- アンカー・マージン概念は同じ。九分割 GUI も
Panel
+StyleBox
で表現。
- アンカー・マージン概念は同じ。九分割 GUI も
- Canvas → CanvasLayer(2D)/Viewport(3D 表示を 2D に合成)
- ScrollRect → ScrollContainer
- Layout Group → BoxContainer / GridContainer / FlowContainer
9. Physics
Unity | Godot 4 |
---|---|
Rigidbody / Rigidbody2D | RigidBody3D / RigidBody2D |
Collider / Collider2D | CollisionShape3D / 2D |
PhysicsMaterial | PhysicsMaterialResource |
Physics.Raycast |
direct_space_state.intersect_ray |
物理層のビットマスクは collision_layer
と collision_mask
の 2 値で設定します。
10. アセット管理
Unity | Godot 4 |
---|---|
Asset Database, GUID | リソースパス (res://… ) が ID そのもの |
Addressables |
ResourceLoader.load_async() + 自前キャッシュ |
AssetBundle |
Pck パッケージ (--export-pack ) |
Unity Package Manager (UPM) |
Asset Library / git submodule + add_subfolder
|
- pckはまだ使ってないしパフォーマンスとか調べられてないです。
- Asset Libraryは全然充実してない、ほぼツールしかないっす。
- UI画像とか3Dモデルは別のサイトで探すしかない
- Itch.ioとか使ってみたい
11. ビルドとデプロイ
- Editor → Project → Export でプリセット作成。Unity における Build Settings 相当。
- コマンドラインビルドもできる。
godot --export-release "PresetName" build.exe
。 - Steam配信は生成物を depot に突っ込めば完了(詳細は Steamworks ドキュメント参照)。
12. Tips for Smooth Migration
-
コンポーネント指向との違いに注意する
- Godot はスクリプト継承/シグナル(イベント駆動)が基本
- そもそも1Nodeに1スクリプトしかアタッチできない。
- Godot はスクリプト継承/シグナル(イベント駆動)が基本
-
Autoload を早期に設計
- シングルトンを作りたい場合、プロジェクト設定側で設定できる。
- Globalでスクリプトを選ぶと 勝手にインスタンスが作られて
DontDestroyOnLoad
されるイメージ。その後Staticで各種関数を呼び出せる。
-
GDScript を触る
- C# だけでも開発可能ですが、サンプルやプラグインは大半が GDScript 製。
- ゲームロジックを書くことに集中できて、個人的にかなり好みです。
- まぁC#も4系から
.Net(8.0)
になったし mono時代より食指が伸びるけど、、
以上
Discussion