Khi các dự án trở nên phức tạp, trở nên quan trọng để suy nghĩ về cách các kịch bản được tổ chức.Các thực hành tổ chức tốt có thể đảm bảo mã không bị lặp lại giữa các kịch bản, hoặc trở nên khó quản lý.
Một cách tốt hơn để tổ chức và tái sử dụng mã là với module scripts , một loại script độc đáo lưu trữ một bộ các chức năng và biến số được thiết kế để đáp ứng một mục đích chung, như quản lý tiền của người chơi hoặc kẻ thù.Mã trong kịch bản của mô-đun có thể được sử dụng bởi các kịch bản khác.Theo cách đó, bạn có thể gọi chức năng tương tự mà cung cấp tiền xu từ nhiều kịch bản khác nhau mỗi khi một người chơi hoàn thành một nhiệm vụ hoặc tìm thấy một món đồ.
Bằng cách lưu các mã thông dụng được sử dụng trong các kịch bản mô-đun, nó làm cho việc duy trì và tổ chức mã dễ dàng hơn vì các thay đổi chỉ cần được thực hiện cho một kịch bản mô-đun, thay vì cập nhật nhiều kịch bản.
Cơ bản kịch bản module
Các kịch bản mô-đun thực sự là đối tượng riêng biệt của chúng so với các đối tượng kịch bản.Trong Roblox, các kịch bản mô-đun có thể được đánh dấu bằng một biểu tượng màu tím .
Tạo một kịch bản module
ModuleScripts thường được đặt trong ServerScriptService khi được sử dụng bởi các kịch bản bên máy chủ và ReplicatedStorage khi được sử dụng bởi các kịch bản bên máy khách (như tương tác GUI).
- Tạo một ModuleScript trong ServerScriptService .

Cấu trúc của các kịch bản module
Khi tạo, mỗi kịch bản mô-đun bắt đầu với mã dưới đây:
local Module = {}return Module
Dòng local Module = {} tạo một bảng, hoặc chứa các mã, nơi các chức năng và biến chung của mô-đun có thể được lưu trữ.Bảng này nên được đổi tên thành mục đích của mô-đun, chẳng hạn như RewardManager hoặc ParticleController .So với các biến khác là camel case ( myVariable ), bảng bảng module được khuyến nghị sử dụng pascal case và bắt đầu in đậm ( MyModule ).
local RewardManager = {}return RewardManager
Vì vậy, các kịch bản khác có thể sử dụng các chức năng hoặc biến không địa phương của một mô-đun, mỗi mô-đun kết thúc với return MyModule.Bất cứ khi nào một kịch bản khác cố gắng lấy mã từ mô-đun, trả về cho phép kịch bản truy cập mã lưu trong bảng mô-đun.
Thêm vào kịch bản module
Để thêm một chức năng hoặc biến vào module có thể được sử dụng trong một kịch bản khác, hãy nhập tên bảng module, theo sau bởi một chấm câu, và tên của chức năng hoặc biến, như trong TestModule.myVariable .Sử dụng operator dấu chấm là một cách khác để thêm mã vào bảng, cho phép các kịch bản khác truy cập mã đó bất cứ khi nào bảng mô-đun được trả về.
local TestModule = {}
-- Thêm một biến vào bảng 'TestModule'
TestModule.myVariable = 100
-- Thêm một chức năng vào bảng 'TestModule'
function TestModule.doTask(player)
-- mãgiữ chỗ
end
return TestModule
Phạm vi trong kịch bản module
Đối với chức năng hoặc biến của một mô-đun được sử dụng trong một kịch bản bên ngoài, không nhập local .
Nhập local trước biến và chức năng có nghĩa là chúng chỉ có thể sử dụng bởi kịch bản đó .Mặc dù đây là một thực hành tốt cho hầu hết các kịch bản để giảm lỗi và giải quyết sự cố, bạn không thể làm cho chức năng và biến của module kịch bản địa phương.
Bất kỳ mã nào được sử dụng chỉ bởi kịch bản module đó vẫn phải bao gồm local .Ví ví dụ / trường hợp, mã dưới đây bao gồm biến địa phương difficultyModifier , chỉ có thể được sử dụng trong kịch bản module đó, và chức năng getCoinReward() , có thể được sử dụng trong các kịch bản bên ngoài module.
local RewardManager = {}
-- Chỉ có thể sử dụng trong kịch bản module
local rewardCoins = 50
-- Chỉ có thể sử dụng trong kịch bản module
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Có thể sử dụng trong các kịch bản khác
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Sử dụng mô-đun trong các kịch bản khác
Bởi chính nó, một kịch bản mô-đun không thể chạy mã - nó cần được tải vào một kịch bản khác bằng cách sử dụng từ khóa require() .Chức năng require() nhận một tham số, vị trí của kịch bản module trong Explorer.
Để sử dụng một mô-đun, trong một kịch bản riêng biệt, hãy đặt một biến bằng require(moduleScript) .
local MyModule = require(ServerStorage.ModuleScript)
Bây giờ, biến MyModule chứa bảng module được tạo trong kịch bản đó.Để sử dụng chức năng và biến từ bảng đó, hãy nhập tên biến, sau đó là một chấm câu và tên chính xác của những gì sẽ được sử dụng trong kịch bản module, như MyModule.myFunction() .Khi kịch bản chạy và đến dòng đó, nó sẽ truy cập chức năng hoặc biến cụ thể được lưu trong bảng module.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Ví dụ quản lý phần thưởng
ModuleScript - Quản lý phần thưởng
local RewardManager = {}
-- Chỉ có thể sử dụng trong kịch bản module
local rewardCoins = 50
-- Chỉ có thể sử dụng trong kịch bản module
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Có thể sử dụng trong các kịch bản khác
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Tập lệnh - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Tải kịch bản modulelocal RewardManager = require(ServerStorage.RewardManager)--Gọi chức năng từ kịch bản modulelocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Gỡ rào chắn chung
Một số lời khuyên ở đây giải quyết các vấn đề thông thường khi làm việc với các kịch bản module.Hãy nhớ rằng các kịch bản module có thể là một chủ đề phức tạp với nhiều sắc thái hơn.Để biết thêm chi tiết, xem hướng dẫn kỹ thuật này về Module Scripts. Vấn đề: Nhận được một thông báo lỗi bao gồm: "Infinite yield possible" hoặc "not a valid member" .
Kiểm tra chính tả của kịch bản module nơi nó được tải.require() phải bao gồm đường dẫn và chính tả chính xác của kịch bản module, có thể được đặt tên khác với bảng module. Vấn đề: Nhận được một thông báo lỗi bao gồm: "attempt to index global" .
Trong bất kỳ kịch bản nào sử dụng kịch bản mô-đun, hãy chắc chắn rằng nó được tải bằng cách sử dụng chức năng require().Nếu không, kịch bản đó không thể sử dụng chức năng và biến của kịch bản module.
Tổng quát
Tập lệnh module trong Roblox là một phương pháp lập trình viên sử dụng để tổ chức và tái sử dụng mã.Một kịch bản module thường được lưu trong ServerStorage (hoặc ReplicatedStorage cho các tương tác dựa trên khách hàng).Từ đó, các kịch bản khác có thể gọi chức năng và biến được lưu trong kịch bản module đó.
ví dụ / trường hợp, một trò chơi có thể trao điểm cho người chơi vì thu thập được các vật phẩm.Một kịch bản module có thể xử lý mã để cung cấp điểm.Sau đó, các kịch bản cho các loại đối tượng khác nhau chỉ có thể gọi chức năng kịch bản module.Điều này giảm nhu cầu sử dụng lại mã giữa các kịch bản, làm cho mã dễ hiểu và duy trì hơn.