從零開始學習開發mcfunction
授課導師: Darcy Liao | 顧問/網頁設計: 培根
講義內容
單元一:課程介紹與 mcfunction 簡介
歡迎各位來到「從零開始學習開發mcfunction」的課程,本次課程專為 **Minecraft 基岩版(Bedrock Edition)** 設計。我是你們的導師,Darcy Liao。在今天的課程中,我們將從最基礎的概念開始,一步步帶領大家了解並掌握 mcfunction 這項強大的工具。
mcfunction 在基岩版中是行為包(Behavior Pack)的核心組成部分。它允許玩家將一系列指令方塊指令寫入一個`.mcfunction`檔案中,然後在遊戲中透過單一指令來執行整個腳本。這就像是寫程式碼一樣,你可以將複雜的邏輯和指令序列打包成一個可重複使用的函數,極大地簡化了工作流程,同時也提升了效能和可管理性。
基岩版與 Java 版在指令和檔案結構上有許多差異,我們將會特別說明這些不同之處。學會使用行為包,你可以輕鬆地修改、分享和管理你的指令集,甚至可以讓你的指令在遊戲中自動循環執行。
單元二:建立你的第一個 mcfunction 行為包
要開始你的 mcfunction 旅程,你必須先學會如何建立一個「行為包」(Behavior Pack)。行為包是 Minecraft 基岩版用來加載自定義內容的容器。
**第一步:找到正確的資料夾**
首先,找到你的 Minecraft 安裝資料夾,通常位於:
- **Windows 10/11:** `%localappdata%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\development_behavior_packs`
- **Android:** `storage/emulated/0/games/com.mojang/development_behavior_packs`
- **iOS:** `Minecraft > games > com.mojang > development_behavior_packs`
**第二步:創建行為包資料夾**
在 `development_behavior_packs` 資料夾中,創建一個新的資料夾,例如 `my_first_bp`。這個資料夾將包含你所有的指令和配置文件。
**第三步:創建 `manifest.json` 檔案**
接下來,在 `my_first_bp` 內部,創建一個名為 `manifest.json` 的檔案。這個檔案是行為包的描述文件,Minecraft 會透過它來識別你的行為包。請用純文字編輯器打開它,並貼上以下內容:
{
"format_version": 2,
"header": {
"description": "我的第一個mcfunction行為包",
"name": "My First Behavior Pack",
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"version": [1, 0, 0],
"min_engine_version": [1, 16, 0]
},
"modules": [
{
"description": "Functions",
"type": "data",
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"version": [1, 0, 0]
}
]
}
**`manifest.json` 欄位說明:**
- `format_version`: 行為包的格式版本,固定為 2。
- `header`: 行為包的標題資訊。
- `description`: 在遊戲中顯示的行為包描述。
- `name`: 在遊戲中顯示的行為包名稱。
- `uuid`: 全球唯一識別碼,必須是唯一的。
- `version`: 行為包的版本號,由三個數字組成。
- `min_engine_version`: 最低支援的遊戲版本。
- `modules`: 包含行為包的各個模組。
- `description`: 模組的描述。
- `type`: 模組類型,`data` 代表這是指令和函數模組。
- `uuid`: 模組的唯一識別碼,與 `header` 中的 `uuid` 必須不同。
- `version`: 模組的版本號。
**UUID 生成器:** 兩個 `uuid` 必須是唯一的。你可以使用線上 UUID 生成器,例如 `uuidgenerator.net` 來創建它們。
單元三:你的第一個 mcfunction 檔案與命名空間
在第二個單元中,我們已經創建了行為包的基礎結構。現在,讓我們創建你的第一個 `.mcfunction` 檔案,並了解一個非常重要的概念:**命名空間(Namespace)**。
**命名空間** 就像是一個專案資料夾,它幫助你組織和管理你的所有指令腳本,避免與其他行為包的腳本名稱衝突。
在你的行為包資料夾 (`my_first_bp`) 內部,你需要創建以下資料夾結構:
- `my_first_bp/`
- `manifest.json`
- `functions/`
- `my_namespace/`
- `hello.mcfunction`
- `my_namespace/`
`my_namespace` 是你自定義的命名空間名稱。然後,在 `hello.mcfunction` 檔案中,寫入以下內容:
# 這是我的第一個mcfunction (基岩版)
# 註解使用 # 符號
say 您好,歡迎來到 Darcy 的 mcfunction 課程!
要使用這個行為包,你需要在遊戲中創建或編輯一個世界,然後在世界設定中啟用這個行為包。啟用後,進入遊戲,按下 `T` 鍵打開聊天框,輸入你的第一個 mcfunction 指令:
/function my_namespace/hello
你會看到聊天框中出現「您好,歡迎來到 Darcy 的 mcfunction 課程!」的文字。恭喜你,你已經成功創建並執行了你的第一個基岩版 mcfunction!
單元四:強大的選擇器
在 Minecraft 基岩版指令中,選擇器 (Selectors) 是用來鎖定特定目標的關鍵。了解如何正確使用它們,是掌握指令方塊和 mcfunction 的第一步。
以下是幾個最基本的選擇器:
- `@p`:距離最近的玩家
- `@a`:所有玩家
- `@r`:隨機一名玩家
- `@e`:所有實體(包括生物、掉落物、箭矢等)
- `@s`:執行指令的實體自己
**更進階的選擇器參數**
基岩版的選擇器參數與 Java 版不同,它更為簡潔,通常以單一字母表示。
# 傳送距離最近的殭屍到特定位置 (c=1 指 limit=1)
tp @e[type=zombie,c=1] ~ ~10 ~
# 賦予所有存活玩家一個鑽石 (m=s 指 gamemode=survival)
give @a[m=s] diamond
# 殺死半徑5格內的所有苦力怕 (r=5 指 distance=..5)
kill @e[type=creeper,r=5]
# 尋找 Y 軸高度在 60 到 70 之間的玩家
tellraw @a[y=60,dy=10] {"rawtext":[{"text":"玩家在特定高度!"}]}
**多個參數組合:**
你可以同時使用多個參數來精確篩選目標。
# 傳送半徑10格內所有名為 'MyPet' 的豬
tp @e[type=pig,name="MyPet",r=10] ~~~
# 給予所有在冒險模式(Adventure)的玩家一個鑽石
give @a[m=a] diamond
# 殺死離我最遠的那個殭屍
kill @e[type=zombie,c=-1]
掌握這些選擇器,你就能夠編寫出更精準、更強大的 mcfunction 腳本。
單元五:記分板、數據與標籤
要讓你的 mcfunction 腳本更具動態性,你必須學會處理數據。在基岩版中,最主要的方式是使用記分板 (Scoreboard) 和標籤 (Tag)。
**記分板 (Scoreboard)**
記分板是最簡單的變數系統,你可以用它來追蹤玩家的得分、生命值、擊殺數等。
# 創建一個名為 'kills' 的記分板目標,用來追蹤玩家的擊殺數
scoreboard objectives add kills playerKillCount
# 在螢幕右側顯示 'kills' 記分板
scoreboard objectives setdisplay sidebar kills
# 檢查玩家的 'kills' 分數是否達到 10
# (這在基岩版中通常需要搭配指令方塊)
# 在指令方塊中設置:execute @p[scores={kills=10..}] ~~~ say 恭喜你,你已達成10次擊殺!
**標籤 (Tag)**
標籤是另一種非常有用的數據處理方式,它允許你給實體(包括玩家)添加自定義標籤。這在需要標記特定目標時非常有用,例如標記隊伍成員或特殊能力的實體。
# 給予距離最近的玩家一個 'fire_mage' 標籤
tag @p add fire_mage
# 檢查所有帶有 'fire_mage' 標籤的玩家,並給予他們火焰保護效果
effect @a[tag=fire_mage] fire_resistance 10 1 true
# 移除玩家的標籤
tag @a remove fire_mage
# 檢查所有不帶有 'fire_mage' 標籤的玩家
say @a[tag=!fire_mage] 缺少標籤
單元六:流程控制與循環執行
要讓你的 mcfunction 腳本更加智慧,你需要學會使用流程控制指令,特別是 `execute` 指令。
`execute` 指令可以讓你根據特定條件來執行另一個指令。基岩版的 `execute` 語法與 Java 版不同,它更為簡潔,格式為 `execute <目標選擇器> ~~~ <要執行的指令>`。
# 檢查特定玩家是否存在,然後以該玩家的身份說話
execute @a[name=Darcy] ~~~ say Darcy 在這裡!
# 檢查玩家是否站在石頭方塊上,然後給予鑽石
# 這在基岩版中通常需要連鎖指令方塊來實現,無法直接在function中實現 'if block'。
**循環執行** 在基岩版中可以通過 `tick.json` 檔案來實現,但檔案結構與 Java 版的數據包不同。`tick.json` 位於你的行為包的 `functions` 資料夾內。
# 檔案路徑:my_first_bp/functions/tick.json
{
"values": [
"my_namespace/your_loop_function"
]
}
# 檔案路徑:my_first_bp/functions/my_namespace/your_loop_function.mcfunction
# 腳本內容
say 腳本正在運行...
# 在基岩版中,tick.json 會自動循環執行,你不需要在腳本中調用自己。
**完整的資料夾結構:**
為了讓您更清楚,這裡展示一個完整的行為包資料夾結構:
- `my_first_bp/`
- `manifest.json`
- `functions/`
- `tick.json`
- `my_namespace/`
- `hello.mcfunction`
- `your_loop_function.mcfunction`
完整演講稿(老師專用)
好的,各位老師和顧問,這裡是本次課程的完整演講稿,本次內容專為 **Minecraft 基岩版** 重新編寫,包含了從基礎到進階的所有內容,旨在提供一個全面的教學框架。
單元一:課程介紹與 mcfunction 簡介 (基岩版)
在這個單元,我們的目標是讓學生對基岩版的 mcfunction 有一個初步的了解,並激發他們的學習興趣。特別強調它在行為包中的角色,以及它與 Java 版數據包的區別。可以透過一些生活化的比喻來解釋,例如將它比作一個食譜,將複雜的烹飪步驟打包成一個簡單的名稱,只要讀者知道這個名稱,就可以快速地完成整個料理。我們也應該強調 mcfunction 相比指令方塊的優勢,例如它不會在遊戲世界中佔用空間,並且易於備份和版本控制。
單元二:建立你的第一個 mcfunction 行為包 (基岩版)
這是最關鍵的單元之一,因為它涉及到實際操作。務必引導學生一步步完成行為包的創建,包括 `manifest.json` 檔案的建立以及正確的文件夾結構。這裡的重點是強調檔案路徑的正確性,這是初學者最容易出錯的地方。可以提醒他們使用類似於「檔案總管」或「Finder」的工具來確認路徑,並且要特別注意文件名稱和後綴的正確性。完成後,讓他們在遊戲中啟用這個行為包,並在聊天框中確認行為包是否成功加載,親身體驗腳本執行的樂趣。
單元三:你的第一個 mcfunction 檔案與命名空間 (基岩版)
在成功創建行為包後,這個單元將引導學生創建第一個實際的 `.mcfunction` 檔案。重點在於解釋命名空間(Namespace)的概念,並說明為什麼需要一個獨立的 `my_namespace` 文件夾。這將有助於學生未來組織更複雜的專案。在寫入第一個 `say` 指令後,讓他們在遊戲中執行 `/function my_namespace/hello` 指令,並看到預期的結果,這會給他們帶來很大的成就感。
單元四:強大的選擇器 (基岩版)
這個單元將介紹指令的強大輔助工具:選擇器。除了基本的 `@p`, `@a`, `@r`, `@e`, `@s` 之外,可以花更多時間解釋選擇器參數的使用。例如,如何使用 `[c]`, `[r]`, `[m]` 等參數來精確篩選目標。可以設計一些有趣的練習題,讓學生練習如何用選擇器來完成特定的任務,例如「傳送所有名稱為 'Villager' 的村民到特定位置」或「給予所有在水中的玩家一個水下呼吸效果」。
單元五:記分板、數據與標籤 (基岩版)
這個單元是將 mcfunction 從靜態腳本提升到動態系統的關鍵。首先,解釋記分板的用途,並展示如何創建、修改和顯示記分板數據。然後,介紹更為複雜但功能強大的標籤。可以舉一些實際案例,例如如何用標籤來修改實體的生命值、給物品添加自定義附魔,或者改變方塊的狀態。這部分可以鼓勵學生思考如何利用這些數據來創建更具互動性的遊戲內容,例如一個簡單的「計分遊戲」或「自動售貨機」。
單元六:流程控制與循環執行 (基岩版)
這個單元將介紹 `execute` 指令,這是 mcfunction 中最重要也是最複雜的指令之一。重點在於拆解 `execute` 指令的各個子指令,例如 `as`、`at`、`positioned` 等,並解釋它們的組合效果。然後,我們將介紹如何利用 `tick.json` 檔案來實現腳本的循環執行,這是一個非常重要的概念,因為它可以讓你的遊戲世界擁有生命。可以設計一個簡單的循環腳本,例如「每秒在玩家頭上召喚一個粒子效果」,讓學生親自體驗循環執行的效果。