腳本類型和位置

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

對於許多開發人員來說,適應 Roblox 腳本的基本挑戰是文件位置和 Script.RunContext 屬性的重要性。根據腳本類輸入、在探索器中的位置和運行上下文,腳本可以以非常不同的方式行動。某些方法呼叫可能失敗,體驗中的對象可能無法訪問,或腳本可能完全部 所有無法運行。

這種複雜度的原因是 Roblox 體驗的默認狀態是多人遊戲。腳本需要能夠只在伺服器上運行、只在客戶端上運行或兩者之間共享。隨著時間的推移,Roblox 平台的進化進一步複雜化了情況。

腳本類型

Roblox 有三種類型的腳本:

  • Script - 取決於位置和 Script.RunContext 屬性,在服務器或客戶端上運行的代碼。
  • LocalScript - 只在客戶端運行的代碼。沒有執行上下文。
  • ModuleScript - 您可以在其他腳本中重複使用的代碼。沒有執行上下文。

當您創建 Script 時,其預設執行上下文是 Legacy , 即它是 a) 是服務器側的腳本和 b) 只在服務器容器中運行,例如 WorkspaceServerScriptService

  • 如果您將腳指令碼的執行上下文變更為 Server,現在也可以在 ReplicatedStorage 執行,但這不是建議的。該位置的內容會複製到客戶端,因此不適合用於服務器端的腳本。
  • 如果您將腳指令碼的執行上下文變更為 Client,它可以在 ReplicatedStorage 執行。它也可以在 StarterCharacterScriptsStarterPlayerScripts 執行。但是,新手容器會複製到客戶端,因此原始腳本 複製運行,這是不可取的。

若要變更運行指令碼的上下文,請在 導覽器 中選擇它,並在 屬性窗口 中變更值。

RunContext property indicated for a Script.

建議

  • 使用 ServerClient 值來執行 RunContext 可以消除腦力混亂,並可以幫助你維持項目的組織。非預設值的最佳使用案例是:RunContext

    • 你想從 ReplicatedStorageReplicatedFirst 執行的客戶端腳本。
    • 您包含在 模型 中的服務器或客戶端腳本。明確設置執行上下文會讓模型和包更有可能在各種位置正常運作。
  • 要在服務器和客戶端腳本之間共享代碼,請在 ModuleScripts 中使用 ReplicatedStorage

  • 使用 LocalScriptsStarterCharacterScripts , StarterPlayerScripts , StarterGui , 及 StarterPack

腳本位置

位置|說明:---|---工作區|代表遊戲世界。這個位置很適合直接附加到對象並控制其行為的服務器腳本。複製第一 | 包含複製到客戶端之前的任何東西的對象。此位置最適合顯示載入屏幕所需的絕對最小集合對象和客戶端腳本。複製儲存 | 包含被複製到客戶端和伺服器的對象。這個位置非常適合 Class.ModuleScript\|ModuleScripts 你想在服務器和客戶端上使用的東西。Class.LocalScript\|LocalScripts不從這個位置執行,但Class.Script\|Scripts帶有Client執行上下文的運行。服務器腳本服務 | 包含服務器腳本。這個位置非常適合需要存取伺服器端功能或物件的腳本,例如遊戲邏輯和雲端儲存。服務器儲存 | 包含服務器側對象。這個位置非常適合那些不需要在體驗加入時立即複製給客戶的大型對象。腳本不從此位置運行,但您可以在此儲存服務器端 Class.ModuleScript\|ModuleScripts 。新手玩家.新手角色腳本 | 包含 Class.LocalScript\|LocalScripts 在角色生成時運行的腳本。新手玩家.新手玩家腳本 | 包含通用的 Class.LocalScript\|LocalScripts 腳本,當玩家加入體驗時運行。新手導覽 | 包含客戶端在載入遊戲時顯示的 GUI 元素。Class.LocalScript\|LocalScripts這個位置非常適合修改遊戲用戶介面的腳本,例如添加按鈕、選單和彈出窗口。新手包 | 通常只包含 Class.Tool\|Tools ,但也可以包含 Class.LocalScript\|LocalScripts 來設置玩家背包。

這張圖顯示哪些瀏覽器窗口位置可以包含客戶端腳本。記住,ReplicatedFirstReplicatedStorage 可以包含 ScriptsRunContextClient ,而 Starter[] 容器應該使用 LocalScripts

Diagram showing which script locations run on clients.

範例項目結構

植物參考項目顯示您如何在大型、複雜的體驗中組織您的代碼。

值得注意的是,它如何將大多數代碼存儲為可重複的 ModuleScriptsReplicatedStorageServerStorage 中。