MF Blogs 便利ツール
GodotのNodeツリーとUnityのGameObject構造を対比した抽象イメージ

記事

Unity経験者向け:Godotの用語対応表

Unity経験者がGodotを学ぶときに役立つ用語対応表です。Node、Scene、SignalなどGodotの主要概念が、UnityのGameObject、Component、Prefabのどれに近いのかを注釈付きで整理しました。

0:00 0:00

UnityからGodotに乗り換える、またはGodotを試してみたい人向けに、Godotの主要な用語をUnityの概念に置き換えて整理しました。

GodotはUnityと同じく「シーンにオブジェクトを配置してゲームを作る」ように見えるため、Unreal Engineよりは感覚的に近い部分があります。

ただし、Godotでは NodeScene の考え方が非常に重要です。Unityの GameObject + Component + Prefab + Scene の関係に似ている部分もありますが、完全に同じではありません。

特にGodotでは、

Sceneは「画面」や「ステージ」だけではなく、キャラクター、弾、UI、エフェクトなど、あらゆる再利用可能なNodeツリーを表す

という点を押さえると理解しやすくなります。

GodotのNodeツリーとUnityのGameObject構造の違いを並べた図

まず覚えたい基本対応表

GodotUnityで近いもの注釈
NodeGameObject + Componentの中間Godotの最小構成単位です。表示、音、物理、カメラ、UIなどもNodeとして存在します。厳密にはUnityのGameObjectのような空の入れ物ではなく、Node自体が機能を持つ点が異なります。
ScenePrefab / Scene / GameObject階層GodotのSceneは、Nodeツリーを保存したものです。キャラクター、敵、弾、UI、ステージ、タイトル画面など、何でもSceneにできます。厳密にはUnityのSceneファイルよりPrefabに近いことも多く、用途がかなり広いです。
Main Scene起動時に読み込むUnity Sceneゲーム開始時に最初に読み込まれるSceneです。厳密にはUnityのSceneと違い、Main Scene自体も単なるNodeツリーなので、ゲーム管理用Nodeだけを置く構成も可能です。
Scene TreeHierarchy実行中のNode階層です。UnityのHierarchyにかなり近い感覚で見られます。厳密にはGodotではScene Treeが実行時の構造そのもので、Nodeの親子関係が処理順や座標にも強く関わります。
Root NodeルートGameObjectSceneの一番上にあるNodeです。厳密にはUnityの空GameObjectのように何でもよいわけではなく、2DならNode2D、3DならNode3D、UIならControlなど、Sceneの性格に合ったRootを選ぶことが多いです。
Instancing ScenePrefabのインスタンス化保存したSceneを別のScene内に配置したり、実行時に生成したりすることです。UnityのPrefab Instantiateにかなり近いですが、GodotではSceneそのものをネストして組み立てる設計がより中心的です。

GameObject / Componentまわり

GodotUnityで近いもの注釈
Node2D2D用GameObject / Transform付きGameObject2D座標、回転、スケールを持つNodeの基底です。厳密にはUnityのTransformコンポーネントを持つGameObjectに近いですが、Node2D自体が継承ベースのクラスです。
Node3D3D用GameObject / Transform3D座標、回転、スケールを持つNodeです。Unityでは全GameObjectがTransformを持ちますが、GodotではNode、Node2D、Node3D、Controlなど用途別に基底Nodeが分かれる点が異なります。
Sprite2DSpriteRenderer2D画像を表示するNodeです。厳密にはUnityのSpriteRendererコンポーネントではなく、表示機能を持ったNodeそのものです。
MeshInstance3DMeshRenderer + MeshFilter3Dメッシュを表示するNodeです。UnityではGameObjectにMeshFilterとMeshRendererを付ける感覚ですが、GodotではMeshInstance3DというNodeで表現します。
Camera2D / Camera3DCameraカメラです。Unityとかなり近いですが、GodotではカメラもNodeツリー内のNodeとして扱います。
Light2D / Light3D系Lightライトです。UnityのLightコンポーネントに近いですが、GodotではLight自体がNodeです。
AudioStreamPlayerAudioSource音を再生するNodeです。UnityのAudioSourceコンポーネントに近いですが、Godotでは2D用、3D用、通常用でNodeが分かれる点に注意です。
CollisionShape2D / CollisionShape3DCollider衝突形状を定義するNodeです。厳密には単体では物理オブジェクトにならず、AreaやBody系Nodeの子として使うことが多いです。

Prefab / Scene設計の対応

GodotUnityで近いもの注釈
Sceneを保存するPrefab化するGodotではキャラクターやUI部品などをSceneとして保存し、再利用します。UnityのPrefabに近いですが、Godotではステージや画面全体も同じScene形式で扱うため、より統一的です。
Sceneを子として配置するPrefabをHierarchyに置くあるSceneの中に別Sceneを配置できます。UnityのPrefabインスタンスに非常に近いですが、Godotではこの「Sceneのネスト」がゲーム構成の基本です。
PackedScenePrefab Asset / GameObject参照実行時に読み込んでインスタンス化できるSceneリソースです。UnityのPrefab参照に近いですが、実体はNodeツリーのテンプレートです。
Editable ChildrenPrefab Instanceの一部Overrideインスタンス化したSceneの子Nodeを編集できるようにする機能です。UnityのPrefab Overrideに似ていますが、GodotではScene継承やインスタンス編集との関係を意識する必要があります
Inherited ScenePrefab Variant既存のSceneを継承して別バージョンを作る仕組みです。UnityのPrefab Variantに近いですが、GodotではNodeツリーとスクリプトの継承感覚が混ざります。

スクリプト・ライフサイクル

GodotUnityで近いもの注釈
GDScriptC#スクリプトGodot標準のスクリプト言語です。Pythonに似た構文で、GodotのNode APIと相性が良いです。厳密にはUnity C#のような.NET中心の開発ではなく、Godot専用言語として設計されている点が異なります。
C# in GodotUnity C#GodotでもC#を使えます。Unity経験者には入りやすい選択肢です。ただしGodotではGDScriptの情報量が多く、公式サンプルやコミュニティ情報もGDScript中心になりやすい点に注意です。
ScriptをNodeにAttachGameObjectにMonoBehaviourを付けるNodeにスクリプトを付けて振る舞いを定義します。UnityのMonoBehaviourにかなり近い感覚ですが、GodotではNodeの種類自体が機能を持っているため、スクリプトは必要なNodeにだけ付けることが多いです。
_ready()Start()NodeがScene Treeに入って準備完了したときに呼ばれます。UnityのStartに近いですが、親子Nodeの初期化順を意識する場面があります
_enter_tree()Awake()に少し近いNodeがScene Treeに入ったタイミングで呼ばれます。UnityのAwakeと完全一致ではありません。GodotではTreeに入る前後のライフサイクルが重要です。
_process(delta)Update()毎フレーム呼ばれる処理です。UnityのUpdateにかなり近いです。描画フレームに依存する処理に使います。
_physics_process(delta)FixedUpdate()物理フレームごとに呼ばれる処理です。UnityのFixedUpdateに近く、移動や物理関連の処理に向いています
queue_free()Destroy(gameObject)Nodeを削除予約します。UnityのDestroyに近いですが、Godotでは即時削除ではなく安全なタイミングで削除される点を意識します。
get_node()GetComponent / transform.FindNodeツリーから指定PathのNodeを取得します。UnityのGetComponentとは少し違い、型ではなくNodePathで探すことが多いです。
@onreadyStart()で参照を取得する処理Nodeが準備できた後に参照を初期化するための仕組みです。UnityでStart内にGetComponentを書く感覚に近いです。

イベント・通信

GodotUnityで近いもの注釈
SignalUnityEvent / C# event / delegateNode間のイベント通知です。ボタン押下、エリア侵入、HP変化などに使います。UnityEventにかなり近いですが、GodotではSignalがNode間通信の中心的な仕組みとして頻出します。
GroupTag / Layer / FindGameObjectsWithTagNodeにグループ名を付けてまとめて取得・呼び出しできます。UnityのTagに近いですが、GodotのGroupは複数所属や一括メソッド呼び出しがしやすいです。
Autoload / SingletonDontDestroyOnLoad + Singleton ManagerSceneをまたいで常駐するグローバルScript/Nodeです。UnityでGameManagerをDontDestroyOnLoadする構成に近いですが、GodotではProject SettingsからAutoload登録するのが標準的です。
NodePathHierarchy上の参照パスNodeへのパスです。UnityではInspector参照やGetComponentが中心ですが、GodotではNodePathで親子関係をたどる場面が多いです。
Export変数[SerializeField] public field@exportを付けた変数をInspectorで編集できます。UnityのSerializeFieldにかなり近いです。

2D / 3D / 物理

GodotUnityで近いもの注釈
CharacterBody2D / CharacterBody3DCharacterController / Rigidbodyを使わない移動キャラ自分で移動ロジックを書くキャラクター用Bodyです。UnityのCharacterControllerに近いですが、Godotではmove_and_slide()などを使って制御するのが一般的です。
RigidBody2D / RigidBody3DRigidbody / Rigidbody2D物理演算で動くBodyです。Unityとかなり近いですが、GodotでもTransformを直接いじると物理と衝突しやすい点は同じです。
StaticBody2D / StaticBody3DStatic Collider / 動かないCollider壁や床など、動かない物理オブジェクトです。UnityではGameObjectにColliderを付けるだけで静的Colliderになりますが、GodotではStaticBody系Nodeを使うのが基本です。
Area2D / Area3DTrigger Collider範囲検知用です。UnityのIs Trigger付きColliderに近いですが、GodotではAreaが独立したNodeとして存在します。
RayCast2D / RayCast3DPhysics.Raycast / Raycast用Componentレイ判定用Nodeです。UnityではコードでRaycastすることが多いですが、GodotではRayCast NodeをSceneに置いて使う方法も一般的です。

UIまわり

GodotUnityで近いもの注釈
ControlUI GameObject / RectTransformGodot UIの基底Nodeです。UnityのRectTransform付きUIオブジェクトに近いですが、GodotではControl系Nodeがレイアウト、入力、サイズ管理を担います。
CanvasLayerCanvasUIをゲーム画面と分けて重ねるために使います。UnityのCanvasに近いですが、GodotではCanvasLayerを使って描画レイヤーを分ける感覚です。
LabelText / TextMeshProUGUIテキスト表示Nodeです。UnityではTextMeshProを使うことが多いですが、GodotではLabelが標準です。
ButtonButtonボタンです。Unityとかなり近いですが、クリックイベントはSignalで接続するのがGodotらしい使い方です。
Container系NodeLayout GroupHBoxContainer、VBoxContainer、GridContainerなどがあります。UnityのHorizontal Layout Group / Vertical Layout Groupに近いですが、GodotではContainer Nodeを親にして子Controlを自動配置します。
ThemeUI Skin / USS / Style定義UI全体の見た目を管理します。Unity UIの標準機能より、GodotではThemeによる一括スタイル管理が重要です。

アセット・データ

GodotUnityで近いもの注釈
ResourceScriptableObject / Material / Textureなどデータやアセットを表す基底概念です。ScriptableObjectに近い用途もありますが、GodotではTexture、Material、MeshなどもResourceです。
Custom ResourceScriptableObject独自データ型を作って保存できます。アイテム定義、敵ステータス、スキル情報などに便利です。UnityのScriptableObjectにかなり近いです。
.tscnPrefab / SceneファイルSceneを保存するテキスト形式ファイルです。UnityのPrefabやSceneに相当しますが、GodotではどちらもSceneという同じ概念で扱う点が特徴です。
.gd.csスクリプトGDScriptファイルです。Unity C#と違い、Godot専用言語です。
.tres / .res.asset / Material / ScriptableObject assetResourceを保存するファイルです。.tresはテキスト、.resはバイナリです。Unityの.assetファイルに近い用途があります。
Project SettingsProject Settings入力、レンダリング、物理、Autoloadなどを設定します。UnityよりもAutoloadやInput Mapなど、ゲーム構造に関わる設定を直接触る場面が多いかもしれません。
Input MapInput Manager / Input System Actions入力アクションを定義する仕組みです。Unity旧Input Managerや新Input SystemのActionに近いですが、Godotでは標準機能としてシンプルにまとまっています。

Unity特有概念との対応

UnityGodotで近いもの注釈
GameObjectNode / SceneインスタンスGodotにはGameObjectに完全対応するものはありません。単体のNodeがGameObject的に見えることもあれば、Nodeツリーを持つSceneインスタンス全体がGameObject的に見えることもあります
ComponentNode / 子NodeUnityではGameObjectにComponentを追加しますが、Godotでは子Nodeを追加して機能を組み合わせることが多いです。厳密にはGodotのNodeはComponent専用ではなく、単体で親子構造やスクリプトを持てる点が違います。
PrefabSceneGodotのSceneはPrefabにかなり近いです。ただしGodotではステージや画面全体もSceneなので、UnityのPrefabより範囲が広いです。
SceneScene名前は同じですが意味が少し違います。UnityのSceneは主にステージや画面全体を表しますが、GodotのSceneはキャラクターやUI部品など小さな単位にも使うのが普通です。
MonoBehaviourNodeにAttachしたScriptUnityのMonoBehaviourに近いです。ただしGodotではScriptはNodeを拡張する形で、Nodeの種類ごとの継承をより意識することがあります。
ScriptableObjectResource / Custom Resourceデータ定義に使えます。GodotではResourceが非常に広い概念で、Custom Resourceを作るとScriptableObject的に使えると考えるとわかりやすいです。
DontDestroyOnLoadAutoloadシーンをまたいで保持する仕組みです。GodotではAutoloadとして登録するのが標準的で、Unityのように実行時にDontDestroyOnLoadするというより、最初から常駐させる感覚です。
Layer / TagLayer / GroupGodotにもLayerはありますが、分類や一括呼び出しにはGroupを使うことが多いです。UnityのTag感覚でGroupを使うと理解しやすいです。
CoroutineTimer / await / AnimationPlayer / TweenGodotではawaitやTimer、Tweenなどで時間差処理を書けます。UnityのCoroutineに完全対応する単一機能というより、用途に応じて複数の仕組みを使い分ける感覚です。
AnimatorAnimationPlayer / AnimationTreeアニメーション制御です。UnityのAnimator Controllerに近いのはAnimationTree、単純なアニメーション再生はAnimationPlayerと考えるとわかりやすいです。
TimelineAnimationPlayer / AnimationMixer的な使い方GodotではAnimationPlayerでプロパティを時間軸制御できます。Unity Timelineほど映像制作寄りの大型機能ではありません
NavMeshAgentNavigationAgent2D / NavigationAgent3Dナビゲーション用です。UnityのNavMeshAgentに近いですが、GodotではNavigationRegionやNavigationServerとの関係を理解する必要があります

Unity経験者が最初に混乱しやすいポイント

1. GodotのSceneはUnityのSceneだけではない

UnityではSceneというと、タイトル画面、ステージ、バトル画面など「画面全体」や「レベル」を指すことが多いです。

一方Godotでは、プレイヤーもScene、敵もScene、弾もScene、HPバーもScene、ステージもSceneです。

つまりGodotのSceneは、Unityでいう Prefab + Scene をまとめたような概念です。

2. GodotにはGameObjectとComponentの明確な分離がない

Unityでは、

GameObjectにComponentを追加して機能を持たせる

という考え方が基本です。

Godotでは、

機能を持ったNodeを親子に組み合わせてSceneを作る

という考え方になります。

たとえばUnityでは、Player GameObjectにSpriteRenderer、Rigidbody2D、Collider2D、AudioSource、PlayerControllerを追加するかもしれません。

Godotでは、Player Sceneの中に以下のようなNodeツリーを作るイメージです。

Player / CharacterBody2D
├── Sprite2D
├── CollisionShape2D
├── AudioStreamPlayer
└── Camera2D

UnityのComponent構成に似ていますが、Godotでは各機能が「Component」ではなく「子Node」として表現されることが多いです。

3. ScriptはNodeを拡張する

UnityのC#スクリプトはMonoBehaviourとしてGameObjectに追加します。

Godotでは、ScriptはNodeにAttachして、そのNodeの振る舞いを拡張します。

extends CharacterBody2D

func _physics_process(delta):
    # 移動処理を書く
    pass

このextends CharacterBody2Dのように、どのNodeを拡張しているかが明確です。

Unity経験者は、最初は「MonoBehaviourの代わりにNodeを継承する」と考えると理解しやすいです。

4. Signalはかなり重要

Unityでは、UI ButtonのOnClick、UnityEvent、C# event、delegateなど複数のイベント手段があります。

Godotでは Signal が非常に重要です。たとえば次のようなイベントはSignalで通知することが多いです。

  • ボタンが押された
  • 敵が倒された
  • Areaに入った
  • HPが変わった
  • アイテムを取得した

UnityEventやC# eventに近いですが、Godotではエディタ上でもコード上でもSignalを接続できるため、Node同士を疎結合にする基本手段として覚えておくと便利です。

5. SingletonはAutoloadで作る

UnityではGameManagerを作ってDontDestroyOnLoadすることが多いです。

Godotでは、Project SettingsからAutoloadに登録して、常駐するScriptやNodeを作ります。たとえばGameManager、SaveManager、AudioManager、SceneManager、GlobalStateのようなものをAutoloadにできます。

ただし、Autoloadは便利な反面、使いすぎると依存関係が見えにくくなります。UnityのSingletonと同じく、使いどころは絞ったほうが安全です。

実践的な置き換えイメージ

Unity経験者なら、Godotでは次のように考えると理解しやすいです。

Unityの「Prefabを作る」

Godotでは、Sceneを作って、Root Nodeを決め、子Nodeを組み、ScriptをAttachする と考えます。

Unityの「GameObjectにComponentを追加する」

Godotでは、必要な機能を持つ子Nodeを追加する と考えます。

Unityの「SceneにPrefabを配置する」

Godotでは、Sceneの中に別Sceneをインスタンスとして配置する と考えます。

Unityの「GameManagerをDontDestroyOnLoadする」

Godotでは、AutoloadにManager Script / Manager Sceneを登録する と考えます。

Unityの「ScriptableObjectでデータを作る」

Godotでは、Custom Resourceを作る と考えます。

まとめ

UnityからGodotに移る場合、最初に押さえるべき違いは以下です。

  • UnityのGameObjectに相当する固定概念はGodotにはない
  • GodotではNodeを親子に組み合わせてSceneを作る
  • GodotのSceneはUnityのSceneだけでなくPrefabにも近い
  • Componentを追加する感覚は、Godotでは子Nodeを追加する感覚に近い
  • MonoBehaviourの代わりに、NodeにScriptをAttachして振る舞いを定義する
  • UnityEventやC# eventに近いものとしてSignalをよく使う
  • ScriptableObject的なデータ管理にはCustom Resourceが使える
  • DontDestroyOnLoad的な常駐管理にはAutoloadを使う

Unity経験者にとってGodotは、Unreal Engineよりも直感的に入りやすい部分が多いと思います。

ただし、Unityの感覚で「GameObjectにComponentを追加する」と考え続けるよりも、Godotでは早めに、

Nodeを組み合わせてSceneを作り、そのSceneをさらに別Sceneに入れてゲーム全体を構成する

という発想に切り替えると、Godotらしい設計がしやすくなります。