Unity → Godot 10 XP
Migration Guide
Unity
Godot

Welcome, Unity Developer

Your skills transfer. The concepts just have different names.

Your C#/Unity knowledge transfers directly. GameObjects become Nodes, Prefabs become Scenes, and Update() becomes _process(). Let's make the translation.

Core Concept
Interactive

GameObject vs Node

The fundamental building block

Unity Approach

GameObject is an empty container. You add Components (Transform, Collider, Script) to give it functionality.

Godot Approach

A Node IS the functionality. A RigidBody2D already has physics. Nodes inherit and extend types.

Unity Terms

Click a Unity term

Godot Equivalents

0 / 5 matched
Read the Code

Prefabs are Scenes

Everything is a scene. Scenes within scenes.

Why Scenes = Prefabs (but better)

In Unity, you build a GameObject, then drag it to create a Prefab. In Godot, you're always editing the "prefab" directly. Every .tscn file is both a working scene AND a reusable asset. No more "Apply to Prefab" headaches!

Read this GDScript and identify which child nodes this script expects. The script uses $NodeName syntax to reference children.

player.gd
extends CharacterBody2D

@export var speed: float = 200.0

func _ready():
    # Get references to child nodes
    $Sprite2D.texture = preload("res://player.png")
    $AnimationPlayer.play("idle")

func _physics_process(delta):
    var direction = Input.get_vector("left", "right", "up", "down")
    velocity = direction * speed
    move_and_slide()

    # Play footstep sound when moving
    if velocity.length() > 0:
        $AudioStreamPlayer2D.play()

func take_damage(amount):
    # Flash the sprite
    $Sprite2D.modulate = Color.RED

Which nodes does this script need as children?

Select all nodes referenced in the script above

Communication
Code Compare

C# to GDScript

Python-like syntax, game-dev focused

C# (Unity)
void Update() {
    float h = Input.GetAxis("Horizontal");
    transform.Translate(Vector3.right * h * speed * Time.deltaTime);
}
Update() _process(delta)
Time.deltaTime delta parameter
GetAxis() get_axis()
transform.Translate position +=
GDScript (Godot)
func _process(delta):
    var h = Input.get_axis("ui_left", "ui_right")
    position.x += h * speed * delta
Key Insight: GDScript doesn't need semicolons, uses snake_case, and passes delta as a parameter instead of using Time.deltaTime.
Interactive

Coordinate Systems

Watch out! 2D Y goes DOWN in Godot

+X
+Y ↓
(0, 0)
x: 0 y: 0
Drag the target and watch how Y coordinates differ!

Unity 2D / 3D

Y+ is UP (like math class)

Godot 2D

Y+ is DOWN (screen coordinates)

Flip your Y logic!
Workflow
Reference

API Quick Reference

Common Unity methods and their Godot equivalents

Lifecycle

Unity Godot Note
Awake() _init() Node created
Start() _ready() Node enters tree
Update() _process(delta) Every frame
FixedUpdate() _physics_process(delta) Physics tick
OnDestroy() queue_free() Cleanup

Input

Unity Godot Note
Input.GetKey() Input.is_action_pressed() Use Input Map
Input.GetKeyDown() Input.is_action_just_pressed()
Input.GetAxis() Input.get_axis()
Input.mousePosition get_viewport().get_mouse_position()

Physics

Unity Godot Note
Rigidbody.AddForce() apply_force() / apply_impulse()
OnCollisionEnter() body_entered signal Connect in editor
OnTriggerEnter() area_entered signal Use Area2D/3D

Scene

Unity Godot Note
Instantiate() scene.instantiate()
Destroy() queue_free()
DontDestroyOnLoad() Autoload singleton Project Settings
FindObjectOfType<T>() get_tree().get_first_node_in_group()
Full API reference at docs.godotengine.org

Migration Complete!

You're ready to build in Godot

10 XP Earned
1 Sections Completed
5 Concepts Learned

You now understand the core differences between Unity and Godot. Time to build something awesome!

Recommended Next Steps