模組腳本介紹

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

隨著專案變得複雜,思考腳本的組織變得重要。良好的組織實踐可以確保代碼不在腳本之間重複,或變得難以管理。

一種更好的組織和重用代碼的方法是使用 模組腳本,這是一種獨特的腳本類型,存儲一組旨在實現特定目的的函數和變數,例如管理玩家金錢或敵人。模組腳本中的代碼可以被其他腳本使用。這樣,當玩家完成任務或找到道具時,你可以從多個不同的腳本中調用同一個給予硬幣的函數。

通過將常用的代碼存儲在模組腳本中,可以更輕鬆地維護和組織代碼,因為只需對一個模組腳本進行更改,而不必更新多個腳本。

模組腳本基本知識

模組腳本實際上是一種與腳本對象不同的獨立對象。在 Roblox 中,模組腳本可以用 紫色 圖標表示。

創建模組腳本

模組腳本通常放置在 ServerScriptService 中,當被伺服器端腳本使用時,而當被客戶端本地腳本(如 GUI 互動)使用時,則放置在 ReplicatedStorage 中。

  1. ServerScriptService 中創建一個 ModuleScript

模組腳本的結構

創建時,每個模組腳本都以以下代碼開始:


local Module = {}
return Module

local Module = {} 創建了一個表格,或代碼容器,模組的共享函數和變數可以存儲在其中。這個表格應該被重命名為模組的用途,例如 RewardManagerParticleController。與其他變數使用駝峰式命名(如 myVariable)不同,模組表格建議使用大寫首字母的駝峰式命名(MyModule)。


local RewardManager = {}
return RewardManager

為了讓其他腳本可以使用模組的非本地函數或變數,每個模組結尾都會返回 MyModule。每當另一個腳本試圖從模組獲取代碼時,返回將允許該腳本訪問存儲在模組表格中的代碼。

添加到模組腳本

要將一個函數或變數添加到模組中,這樣可以在另一個腳本中使用,請輸入模組表格的名稱,後跟一個點和函數或變數的名稱,如 TestModule.myVariable。使用點運算符是將代碼添加到表格的另一種方法,使其他腳本可以在返回模組表格時訪問該代碼。


local TestModule = {}
-- 將變數添加到 'TestModule' 表格
TestModule.myVariable = 100
-- 將函數添加到 'TestModule' 表格
function TestModule.doTask(player)
-- 占位符代碼
end
return TestModule

模組腳本中的範圍

要在外部腳本中使用模組函數或變數,不要 輸入 local

在變數和函數前面輸入 local 意味著它們 供該腳本使用。雖然這對於大多數腳本來說是一種良好的實踐,可以減少錯誤和故障排除,但你不能將模組腳本的函數和變數設為本地。

任何僅由該模組腳本使用的代碼仍應包括 local。例如,下面的代碼包括本地變數 difficultyModifier,該變數僅能在該模組腳本中使用,以及函數 getCoinReward(),該函數可以在模組外的腳本中使用。


local RewardManager = {}
-- 僅在模組腳本中使用
local rewardCoins = 50
-- 僅在模組腳本中使用
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- 在其他腳本中使用
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager

在其他腳本中使用模組

模組腳本本身無法運行代碼——它需要使用關鍵字 require() 在另一個腳本中加載。函數 require() 接受一個參數,即模組腳本在資源管理器中的位置。

要使用模組,在另一個腳本中,將變數設置為 require(moduleScript)


local MyModule = require(ServerStorage.ModuleScript)

現在,變數 MyModule 包含在該模組腳本中創建的模組表格。要使用該表格中的函數和變數,請輸入變數名稱,後跟一個點,然後是該模組腳本中要使用的確切名稱,如 MyModule.myFunction()。當腳本運行並到達該行時,它將訪問存儲在模組表格中的特定函數或變數。


local MyModule = require(ServerStorage.ModuleScript)
MyModule.myFunction()

RewardManager 示例

ModuleScript - RewardManager

local RewardManager = {}
-- 僅在模組腳本中使用
local rewardCoins = 50
-- 僅在模組腳本中使用
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- 在其他腳本中使用
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript

local ServerStorage = game:GetService("ServerStorage")
-- 加載模組腳本
local RewardManager = require(ServerStorage.RewardManager)
-- 從模組腳本調用函數
local coins = RewardManager.getCoinReward("easy")
print("應該獎勵 " .. coins .. " 硬幣")

常見故障排除

這裡的一些提示解決了使用模組腳本時的常見問題。請記住,模組腳本可能是一個複雜的主題,包含更多細節。欲了解更多詳情,請參閱這本更技術性的指南 模組腳本

問題: 獲得包含:"無限等待可能""不是有效的成員" 的錯誤訊息。

  • 檢查加載模組腳本的拼寫。 require() 必須包括模組腳本的確切路徑和拼寫,這可能與模組表格的名稱不同。

問題: 獲得包含:"嘗試索引全局" 的錯誤訊息。

  • 在任何使用模組腳本的腳本中,確保使用函數 require() 加載它。如果沒有,那個腳本將無法使用模組腳本中的函數和變數。

總結

模組腳本 在 Roblox 中是程式設計師用來組織和重用代碼的一種方法。模組腳本通常存儲在 ServerStorage 中(或 ReplicatedStorage 用於基於客戶端的交互)。從那裡,其他腳本能夠調用存儲在該模組腳本中的函數和變數。

例如,一個經驗可能會因玩家收集物品而獎勵點數。模組腳本可以處理贈送點數的代碼。然後,不同類型物品的腳本只需調用模組腳本函數。這減少了在腳本之間重用代碼的需求,使代碼更易於理解和維護。

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。