Godot 4 兒童 2D 遊戲開發入門教學:帶孩子做出第一款平台跳躍遊戲
去年帶我姪子學程式的時候,他跟我說 Scratch 太簡單了,想要做「真正的遊戲」。我想了想,Unity 對小朋友來說太複雜、Unreal 更不用說了,最後選了 Godot 4——結果出乎意料地適合。
Godot 4 是一個完全免費、開源的遊戲引擎,它的 GDScript 語法接近 Python(如果小朋友有用過 Python Pygame 會更熟悉),介面也相對簡潔。最重要的是,它不像其他引擎需要先理解一大堆概念才能開始做東西——十分鐘內就可以看到畫面在動了。
為什麼選 Godot 4 來教小朋友?
先說一下 Godot 4 相比其他引擎,特別適合兒童學習的理由:
- 完全免費、沒有隱藏費用:不像 Unity 有收費門檻的爭議(還記得 2023 年那場風波嗎),Godot 是 MIT 授權,永遠免費
- 安裝檔超小:整個引擎只有約 40MB,不需要安裝、解壓就能用,不會佔太多硬碟空間
- GDScript 很像 Python:語法直覺、沒有分號和大括號,對學過 Scratch 的小朋友來說過渡自然
- 場景樹(Scene Tree)概念直覺:用樹狀結構來組織遊戲物件,跟小朋友解釋起來比 Unity 的 Component System 容易多了
- 2D 功能一流:Godot 的 2D 不是 3D 的附屬品,而是獨立的專業 2D 引擎
適合年齡大約是 10 歲以上,最好已經有一點程式基礎(例如 Scratch 程式經驗)。不過就算是零基礎,跟著這篇教學也可以做出來。
安裝 Godot 4(超簡單)
到 Godot 官網下載最新的 Godot 4 版本。選擇「Standard」版本就好(另一個「Mono」版本是給 C# 用的,小朋友不需要)。
Windows 用戶下載後會得到一個 zip 檔案,解壓後直接雙擊 .exe 就能用了,不需要安裝程式。Mac 用戶也是類似的操作。
第一次打開 Godot,你會看到一個專案管理器。別被嚇到,這裡就只是管理你所有遊戲專案的地方,像是一個遊戲的資料夾管理員。
建立第一個專案
在專案管理器中,點「新增專案」,幫你的遊戲取個名字——比如「我的跳跳冒險」。選一個資料夾來存放,然後按「建立並編輯」。
進入編輯器後,你會看到幾個主要區域:
- 左上「場景」面板:顯示你的遊戲物件樹狀結構
- 中央「畫面」區域:你的遊戲畫面預覽
- 右邊「屬性」面板:選取物件後顯示它的各種設定
- 底部「腳本」區域:寫程式碼的地方
讓我們先建立遊戲的「主場景」。在場景面板按「2D 場景」,這會建立一個 Node2D 作為根節點。把這個場景存檔為 main.tscn。
GDScript 基礎語法速學
GDScript 是 Godot 專屬的程式語言。如果你的小朋友學過 Python,會覺得很熟悉。幾個重點:
# 變數宣告
var score = 0
var player_name = "小冒險家"
var is_jumping = false
# 函數
func say_hello():
print("你好!歡迎來到遊戲世界")
# if 判斷
if score > 10:
print("厲害!")
elif score > 5:
print("不錯喔")
else:
print("繼續加油")
# 迴圈
for i in range(5):
print("跳!", i)跟 Python 最大的不同是 GDScript 有一些遊戲專用的特殊函數,最重要的兩個:
_ready():遊戲物件出現在場景上時執行一次_process(delta):每一幀都會執行一次(一秒約 60 次),用來做持續性的邏輯
建立可操控的角色
現在來建立我們的主角。在場景面板的 main 節點下面,新增一個 CharacterBody2D 節點——這是 Godot 4 用來做可移動角色的專用節點。
CharacterBody2D 需要兩個子節點:
- Sprite2D:角色的圖片。可以先用 Godot 內建的圖示(那個機器人頭)當作暫時的角色圖
- CollisionShape2D:角色的碰撞形狀。選 RectangleShape2D(方形),調整大小讓它大概跟圖片一樣大
建好後,你的場景樹看起來會像這樣:
Main (Node2D)
└─ Player (CharacterBody2D)
├─ Sprite2D
└─ CollisionShape2D把 Player 節點改名為「Player」,方便之後寫程式的時候找到它。
加入移動和跳躍
選取 Player 節點,點右上角的「新增腳本」按鈕,建立一個 player.gd 腳本。把以下程式碼貼進去:
extends CharacterBody2D
var speed = 300.0
var jump_force = -500.0
var gravity = 1200.0
func _physics_process(delta):
# 重力
if not is_on_floor():
velocity.y += gravity * delta
# 跳躍
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = jump_force
# 左右移動
var direction = Input.get_axis("ui_left", "ui_right")
velocity.x = direction * speed
move_and_slide()這段程式碼做了三件事:讓角色受重力影響往下掉、按空白鍵可以跳、按左右鍵可以移動。move_and_slide() 是 Godot 內建的物理移動函數,會自動處理碰撞和滑動。
按 F5 試跑看看,你會發現角色會往下掉——因為我們還沒建地面!
用 TileMap 畫地圖
Godot 4 的 TileMap 系統非常適合做 2D 平台遊戲的地圖。在 Main 節點下新增一個 TileMapLayer 節點。
接下來需要一個 Tile 素材。你可以先用一個簡單的 64x64 的方形圖片當作地面磚塊。在 TileMapLayer 的屬性面板中,建立新的 TileSet,然後把你的圖片拖進去。
設定好 TileSet 後,在編輯器下方會出現「TileMap」面板。選擇你的磚塊,然後直接在畫面上「畫」地圖——就像用畫筆一樣,一格一格點上去。
記得幫每個 Tile 設定碰撞(在 TileSet 編輯器中選「Physics」→ 畫碰撞區域)。這樣角色才會站在地面上,不會穿過去。
畫好一條基本的地面後,再按 F5 試跑。這次你的角色應該可以站在地面上,用左右鍵移動,按空白鍵跳躍了!
加入可收集的金幣
一個平台跳躍遊戲怎麼能沒有金幣呢?讓我們來加入可收集的物品。
建立一個新的場景,根節點用 Area2D,取名為 Coin。底下加上 Sprite2D(用一個圓形圖片當金幣)和 CollisionShape2D(用 CircleShape2D)。
幫 Coin 加一個腳本:
extends Area2D
func _ready():
body_entered.connect(_on_body_entered)
func _on_body_entered(body):
if body.name == "Player":
# 播放收集效果(之後可以加音效)
queue_free() # 金幣消失回到主場景,把 Coin 場景實例化,放在地圖上適當的位置。多放幾個,散佈在不同的平台上,讓玩家需要跳躍才能收集到。
加入簡單的敵人
建立一個簡單的左右巡邏敵人:
extends CharacterBody2D
var speed = 100.0
var direction = 1
var gravity = 800.0
func _physics_process(delta):
velocity.y += gravity * delta
velocity.x = speed * direction
move_and_slide()
# 碰到牆壁就轉向
if is_on_wall():
direction *= -1敵人會自動左右移動,碰到牆壁就轉向。你可以用 RayCast2D 來偵測邊緣,避免敵人走到平台邊緣掉下去——這個就留給小朋友當作進階挑戰吧。
碰到敵人怎麼辦?最簡單的做法是在 Player 的腳本中加入偵測:如果從上方踩到敵人,敵人被消滅;如果從側面碰到,玩家受傷。這個邏輯可以用碰撞偵測的 y 方向來判斷。
顯示分數的 UI
在 Main 場景中加入一個 CanvasLayer 節點(這會讓 UI 固定在螢幕上,不會跟著場景移動),底下加一個 Label 節點。
把 Label 設定在螢幕左上角,字體調大一點。然後建立一個管理分數的全域腳本:
# game_manager.gd(設定為 AutoLoad)
extends Node
var score = 0
func add_score(points):
score += points在 Coin 被收集的時候呼叫 GameManager.add_score(10),在 Label 的腳本中每幀更新顯示:
extends Label
func _process(_delta):
text = "金幣:" + str(GameManager.score)這樣每次收集金幣,左上角的分數就會增加。小朋友看到分數跳動的時候通常都會很興奮。
匯出遊戲分享給朋友
遊戲做好了,當然要分享給朋友!Godot 4 可以匯出成各種平台的執行檔。
最簡單的方式:到「專案」→「匯出」,選擇「Windows Desktop」,按「匯出專案」就會產生一個 .exe 檔案。把這個檔案和旁邊的 .pck 檔案一起分享給朋友,對方直接雙擊就能玩了。
Godot 4 也可以匯出到 HTML5(網頁版),這樣只要分享一個網址,朋友用瀏覽器就能直接玩。可以上傳到 itch.io 這個獨立遊戲平台,完全免費。
進階學習方向
做完第一款遊戲後,可以引導小朋友嘗試以下進階主題:
- 加入音效和背景音樂:Godot 支援 AudioStreamPlayer,加入音效會讓遊戲感覺完全不同
- 動畫角色:用 AnimatedSprite2D 替換靜態圖片,加入走路、跳躍、待機動畫
- 多關卡設計:學習場景切換(SceneTree.change_scene),設計不同難度的關卡
- 存檔系統:用 JSON 儲存最高分和解鎖進度
- 粒子效果:用 GPUParticles2D 做金幣收集的閃光效果
如果小朋友對更視覺化的程式開發有興趣,也可以回頭看看 Roblox Studio 3D 遊戲開發或用 micro:bit 做實體互動專案。
Godot 4 最棒的地方是它的學習曲線很友善,但天花板也很高。小朋友今天做的是簡單的平台跳躍遊戲,但同一個引擎也能做出《Dome Keeper》這種 Steam 上的熱門獨立遊戲。這意味著他們學的技能是可以一路用到專業水準的。
繼續閱讀
Roblox Studio 兒童遊戲開發入門教學:用 Lua 程式打造你的第一個 3D 遊戲
相關文章
你可能也喜歡
探索其他領域的精選好文