Godot 遊戲開發入門:從節點、場景到第一個 2D 小遊戲

Godot 遊戲開發零基礎入門指南:解釋 Godot 的節點、場景、腳本、輸入、物理和資源組織方式,並用一個 2D 小遊戲路線幫助新手理解從專案建立到角色移動、碰撞、UI、音效和導出的完整流程。

Godot 是一款開源遊戲引擎,適合 2D 小遊戲、獨立遊戲原型,以及中等規模的 3D 專案。

它的特點是輕量、開源、啟動快,節點和場景系統清楚。對新手來說,Godot 通常比 Unity 更容易入門;對獨立開發者來說,也更容易控制小專案。

先說結論

Godot 入門不要一開始就學所有功能。

更合理的路線是:

  1. 先做 2D,不急著做 3D。
  2. 先理解節點和場景,不急著寫複雜架構。
  3. 先學 GDScript,不急著上 C#。
  4. 先做一個能開始、能失敗、能重開的小遊戲。
  5. 再補動畫、音效、UI、關卡和導出。

Godot 適合什麼人

Godot 適合想從零學遊戲開發、想做 2D 獨立遊戲、想快速做玩法原型、不想被大型商業引擎工具鏈壓住的人。

如果目標是大型商業團隊管線、成熟資產商店、行動廣告 SDK 或高規格 3D 畫面,Unity 或 Unreal 仍然更成熟。但如果目標是學習和做自己的遊戲,Godot 很適合起步。

安裝和專案建立

到 Godot 官網下載,解壓後直接執行即可。

第一個專案建議:

  • 使用預設 renderer。
  • 專案名用英文。
  • 路徑不要太複雜。
  • 一開始就用 Git。

可以叫:

1
first-godot-game

先熟悉 Scene、FileSystem、Inspector、Script、2D / 3D 視圖。

核心概念:節點和場景

Godot 最重要的是節點和場景。

常見節點:

  • Node2D:2D 物件基礎節點。
  • Sprite2D:顯示圖片。
  • CollisionShape2D:碰撞形狀。
  • CharacterBody2D:可移動角色。
  • Camera2D:2D 攝影機。
  • AudioStreamPlayer:播放音效。
  • Label:顯示文字。

場景是一組節點的組合。玩家、敵人、關卡都可以是場景。

1
2
3
4
Player (CharacterBody2D)
├── Sprite2D
├── CollisionShape2D
└── Camera2D

第一個 2D 專案做什麼

建議做一個 2D 閃避遊戲:

  • 玩家可以上下左右移動。
  • 敵人從邊緣生成。
  • 碰到敵人就失敗。
  • 存活時間就是分數。
  • 有開始、失敗和重新開始。

這能覆蓋移動、輸入、碰撞、生成、UI、Timer、音效和場景重載。

玩家移動

玩家用 CharacterBody2D,掛腳本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
extends CharacterBody2D

@export var speed := 300.0

func _physics_process(delta):
    var direction := Vector2.ZERO

    direction.x = Input.get_axis("move_left", "move_right")
    direction.y = Input.get_axis("move_up", "move_down")
    direction = direction.normalized()

    velocity = direction * speed
    move_and_slide()

輸入 action:

1
2
3
4
move_left  -> A / Left
move_right -> D / Right
move_up    -> W / Up
move_down  -> S / Down

不要在程式裡寫死按鍵,用 action 方便之後支援手把、觸控和改鍵。

碰撞和物理

常用節點:

  • CollisionShape2D:碰撞範圍。
  • Area2D:檢測進入、離開、重疊。
  • CharacterBody2D:玩家或可控角色。
  • RigidBody2D:受物理力影響的物體。
  • StaticBody2D:牆、地面、固定障礙。

新手記住:自己控制移動用 CharacterBody2D,只做碰撞觸發用 Area2D

1
2
3
func _on_body_entered(body):
    if body.name == "Player":
        get_tree().reload_current_scene()

敵人生成

Godot 場景可以像 prefab 一樣實例化:

1
2
3
4
5
6
@export var enemy_scene: PackedScene

func spawn_enemy():
    var enemy = enemy_scene.instantiate()
    enemy.position = Vector2(800, randf_range(50, 550))
    add_child(enemy)

配合 Timer 就能定時生成敵人。

UI、分數和音效

UI 用 Control 系列節點,例如 CanvasLayerLabelButtonPanel

簡單分數:

1
2
3
4
5
var score := 0.0

func _process(delta):
    score += delta
    $CanvasLayer/ScoreLabel.text = str(int(score))

音效用 AudioStreamPlayer

1
$HitSound.play()

功能能跑只是第一步,音效、閃爍、震動和按鈕狀態會讓玩家感到遊戲有回應。

專案目錄

建議一開始整理:

1
2
3
4
5
res://
├── scenes/
├── scripts/
├── assets/
└── ui/

場景放 scenes/,腳本放 scripts/,圖片音訊放 assets/,UI 放 ui/

新手常見坑

  • 節點選錯。
  • 忘記加碰撞形狀。
  • 按鍵寫死。
  • 把所有邏輯塞進 Main.gd
  • 第一個專案做太大。

一個完成的小遊戲,比半途而廢的大構想更有價值。

推薦學習路線

  1. 編輯器基本操作。
  2. 節點和場景。
  3. GDScript 基礎。
  4. 輸入系統。
  5. 2D 移動。
  6. 碰撞和 Area2D
  7. Timer 和生成。
  8. UI 和分數。
  9. 音效和動畫。
  10. 導出桌面或 Web 版本。

總結

Godot 入門的關鍵不是看完所有功能,而是理解組織方式:節點組成場景,場景組成遊戲,腳本驅動行為,信號連接事件,資源用目錄管理。

從 2D 小遊戲開始,把移動、碰撞、UI、音效和重新開始做完,再去學 TileMap、存檔、狀態機、3D、Shader 和導出優化。

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計