Unity 2D 平台跳躍遊戲教學:帶孩子做出第一款像超級瑪利歐的遊戲
如果你的孩子已經玩過 Scratch 做遊戲,可能開始覺得 Scratch 的積木式程式有點「不過癮」了。那恭喜你,是時候進入真正的遊戲引擎 — Unity 了!
今天我們要帶孩子從零開始,用 Unity 做一款 2D 平台跳躍遊戲(就像超級瑪利歐那樣)。整個過程會盡量簡單,讓 10 歲以上有一點 Scratch 基礎的孩子也能跟著做。
從 Scratch 畢業,進入 Unity 的世界
Scratch 和 Unity 最大的差別是什麼?Scratch 用積木拼程式,Unity 用真正的程式碼(C#)。聽起來很嚇人,但其實概念是一樣的:
| Scratch 概念 | Unity 對應 |
|---|---|
| 角色(Sprite) | 遊戲物件(GameObject) |
| 舞台 | 場景(Scene) |
| 積木腳本 | C# 腳本(Script) |
| 造型 | 精靈圖(Sprite Asset) |
| 廣播 | 事件系統(Events) |
如果你的孩子之前學過 Scratch 之後的 Python,那學 C# 會更快上手,因為很多概念是共通的。
安裝 Unity 與建立 2D 專案
首先要安裝兩個東西:
- Unity Hub:從 Unity 官網下載,這是管理 Unity 版本和專案的工具
- Unity Editor:透過 Unity Hub 安裝,建議選擇最新的 LTS(長期支援)版本
安裝好後,開啟 Unity Hub,點選「New Project」:
- 選擇「2D (Built-in Render Pipeline)」模板
- 專案名稱輸入「MyPlatformer」
- 點「Create project」
等待載入完成後,你會看到 Unity 的編輯介面。一開始可能覺得按鈕好多好複雜,但別擔心,我們只需要用到幾個重要的面板。
建立遊戲場景:地板與背景
遊戲的第一步是建立場景。我們需要一個地板讓角色站在上面:
- 在 Hierarchy 面板中按右鍵 → 2D Object → Sprites → Square
- 這會建立一個白色方塊。在 Inspector 面板中把它改名為「Ground」
- 調整 Transform 的 Scale:X 設為 20,Y 設為 1(做成一條長長的地板)
- 把 Position 的 Y 設為 -4(放到畫面下方)
- 加入 Box Collider 2D 元件(點 Add Component → 搜尋 Box Collider 2D)
Box Collider 2D 讓這個方塊變成「實心的」,角色才不會穿過去。
接下來加個背景顏色。點選 Main Camera,在 Inspector 中找到 Background 屬性,改成你喜歡的天空藍色。
製作玩家角色
現在來加入我們的主角:
- Hierarchy → 右鍵 → 2D Object → Sprites → Square
- 改名為「Player」
- 把 Sprite Renderer 的 Color 改成紅色(之後可以換成真正的角色圖片)
- 調整 Scale 為 X: 0.8, Y: 0.8
- Position 設為 X: -5, Y: -2
- 加入以下元件:
- Rigidbody 2D(讓角色受到物理引擎影響)
- Box Collider 2D(讓角色有碰撞體積)
按下 Play 按鈕試試看 — 你的紅色方塊應該會掉下來,然後站在地板上。這就是物理引擎的力量!
撰寫角色移動腳本
現在角色只會站在那邊不動,我們需要寫程式讓它可以左右移動。
- 在 Project 面板中按右鍵 → Create → C# Script
- 命名為「PlayerMovement」
- 雙擊打開,把內容改成:
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
private Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
// 取得左右方向鍵的輸入(-1 到 1)
float moveInput = Input.GetAxisRaw("Horizontal");
// 設定水平速度,保持垂直速度不變
rb.linearVelocity = new Vector2(moveInput * moveSpeed, rb.linearVelocity.y);
}
}
存檔後回到 Unity,把這個腳本拖曳到 Player 物件上。再按 Play — 現在可以用方向鍵左右移動了!
跟孩子解釋一下這段程式在做什麼:Input.GetAxisRaw 就像 Scratch 的「如果按下右鍵」,回傳 -1(左)、0(沒按)或 1(右)。然後我們把這個值乘以速度,設定給角色的物理速度。
加入跳躍物理
平台遊戲怎麼能沒有跳躍?在 PlayerMovement 腳本中加入跳躍功能:
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public float jumpForce = 10f;
private Rigidbody2D rb;
private bool isGrounded = false;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
float moveInput = Input.GetAxisRaw("Horizontal");
rb.linearVelocity = new Vector2(moveInput * moveSpeed, rb.linearVelocity.y);
// 按空白鍵跳躍(只有站在地上才能跳)
if (Input.GetButtonDown("Jump") && isGrounded)
{
rb.linearVelocity = new Vector2(rb.linearVelocity.x, jumpForce);
isGrounded = false;
}
}
// 當角色碰到地面時
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.name == "Ground" ||
collision.gameObject.tag == "Ground")
{
isGrounded = true;
}
}
}
這裡有個重要的概念:isGrounded 變數確保角色只有在地面上才能跳躍。如果沒有這個檢查,玩家就能在空中無限跳(雖然聽起來也蠻好玩的)。
記得把地板(Ground)的 Tag 設為「Ground」:選取 Ground 物件 → Inspector 最上方的 Tag 下拉選單 → Add Tag → 新增 "Ground" → 回來選取它。
關卡設計:平台與障礙物
一條平地太無聊了,讓我們加入懸浮平台:
- 複製 Ground 物件(Ctrl+D)
- 改名為「Platform1」
- 縮小 Scale 到 X: 3, Y: 0.5
- 移到空中的某個位置
- 設定 Tag 為 Ground(這樣角色踩上去也能再次跳躍)
多複製幾個平台,放在不同的高度和位置,就形成了一個簡單的關卡。關卡設計的小技巧:
- 平台之間的距離要考慮角色的跳躍距離
- 從左下到右上的路線比較直覺
- 加入一些「差點跳不到」的平台增加緊張感
- 可以用不同顏色標記不同種類的平台
加入收集物與計分
最後來加點金幣讓玩家收集:
- 建立一個 Circle Sprite,命名為「Coin」
- 縮小到 0.3 大小,顏色改成金色
- 加入 Circle Collider 2D,勾選「Is Trigger」(這樣角色會穿過去而不是撞上去)
- 建立新的 C# 腳本「Coin」:
using UnityEngine;
public class Coin : MonoBehaviour
{
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.name == "Player")
{
// 之後可以在這裡加分
Destroy(gameObject); // 金幣消失
}
}
}
把金幣放在平台附近,玩家碰到就會消失。跟孩子解釋 Trigger 和 Collider 的差別:Collider 是實心的牆壁,Trigger 像是感應區域 — 進入就觸發事件,但不會擋住你。
下一步挑戰
恭喜!你和孩子已經做出了一款基本的平台跳躍遊戲。接下來可以挑戰:
- 加入敵人(碰到就回到起點)
- 製作多個關卡
- 加入 UI 顯示分數
- 用真正的像素圖片取代方塊
- 加入背景音樂和音效
如果孩子還想嘗試其他類型的遊戲,可以看看我們的 Scratch RPG 冒險遊戲教學,先用 Scratch 理解 RPG 的遊戲邏輯,再用 Unity 做出更精緻的版本。
你可能也喜歡
探索其他領域的精選好文