Giới thiệu về module scripts

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Khi các dự án trở nên phức tạp, việc suy nghĩ về cách tổ chức các script trở nên quan trọng. Các thực hành tổ chức tốt có thể đảm bảo rằng mã không bị trùng lặp giữa các script, 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à sử dụng module scripts, một loại script độc đáo lưu trữ một tập hợp các hàm và biến đượ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 các module scripts có thể được sử dụng bởi các script khác. Bằng cách đó, bạn có thể gọi cùng một hàm để tặng xu từ nhiều script 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 vật phẩm.

Bằng cách lưu trữ mã thường được sử dụng trong các module scripts, việc duy trì và tổ chức mã trở nên dễ dàng hơn vì các thay đổi chỉ cần được thực hiện trong một module script, thay vì cập nhật nhiều script.

Cơ bản về module script

Module scripts thực sự là một đối tượng riêng biệt so với các đối tượng script. Trong Roblox, các module scripts có thể được đánh dấu bằng biểu tượng tím.

Tạo một module script

ModuleScripts thường được đặt trong ServerScriptService khi được sử dụng bởi các script phía máy chủ và ReplicatedStorage khi được sử dụng bởi các script phía máy khách (chẳng hạn như tương tác GUI).

  1. Tạo một ModuleScript trong ServerScriptService.

Cấu trúc của module scripts

Khi được tạo, mỗi module script bắt đầu với mã dưới đây:

local Module = {}
return Module

Dòng local Module = {} tạo ra một bảng, hoặc container của mã, nơi các hàm và biến chia sẻ của module có thể được lưu trữ. Bảng này nên được đổi tên thành mục đích của module, chẳng hạn như RewardManager hoặc ParticleController. Khác với các biến khác sử dụng camel case (myVariable), các bảng module được khuyến nghị sử dụng pascal case và bắt đầu bằng chữ hoa (MyModule).

local RewardManager = {}
return RewardManager

Để các script khác có thể sử dụng các hàm hoặc biến không phải local của một module, mỗi module kết thúc bằng return MyModule. Mỗi khi một script khác cố gắng lấy mã từ module, return cho phép script đó truy cập mã được lưu trữ bên trong bảng module.

Thêm vào module scripts

Để thêm một hàm hoặc biến vào module có thể được sử dụng trong một script khác, gõ tên bảng module, theo sau là một dấu chấm, và tên của hàm hoặc biến, như trong TestModule.myVariable. Sử dụng toán tử chấm là một cách khác để thêm mã vào một bảng, cho phép các script khác truy cập mã đó mỗi khi bảng module được trả về.

local TestModule = {}
-- Thêm một biến vào bảng 'TestModule'
TestModule.myVariable = 100
-- Thêm một hàm vào bảng 'TestModule'
function TestModule.doTask(player)
-- Mã mẫu
end
return TestModule

Phạm vi trong module scripts

Để một hàm hoặc biến module có thể được sử dụng trong một script bên ngoài, khônglocal.

local trước các biến và hàm có nghĩa là chúng chỉ có thể được sử dụng bởi script đó. Mặc dù đây là một thực hành tốt cho hầu hết các script để giảm lỗi và khắc phục sự cố, bạn không thể làm cho các hàm và biến module trở thành local.

Bất kỳ mã nào chỉ được sử dụng bởi module script đó vẫn nên bao gồm local. Ví dụ, mã dưới đây bao gồm biến local difficultyModifier, chỉ có thể được sử dụng trong module script đó, và hàm getCoinReward(), có thể được sử dụng trong các script bên ngoài module.

local RewardManager = {}
-- Chỉ có thể sử dụng trong module script
local rewardCoins = 50
-- Chỉ có thể sử dụng trong module script
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Có thể sử dụng trong các script khác
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager

Sử dụng modules trong các script khác

Tự nó, một module script không thể chạy mã — nó cần được tải trong một script khác bằng cách sử dụng từ khóa require(). Hàm require() chấp nhận một đối số, vị trí của module script trong Explorer.

Để sử dụng một module, trong một script riêng biệt, đặ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 module script đó. Để sử dụng các hàm và biến từ bảng đó, gõ tên biến, theo sau là một dấu chấm, và tên chính xác của những gì cần sử dụng trong module script đó, như MyModule.myFunction(). Khi script chạy và đến dòng đó, nó sẽ truy cập hàm hoặc biến cụ thể được lưu trữ trong bảng module.

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

Ví dụ về RewardManager

ModuleScript - RewardManager
local RewardManager = {}
-- Chỉ có thể sử dụng trong module script
local rewardCoins = 50
-- Chỉ có thể sử dụng trong module script
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Có thể sử dụng trong các script khác
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")
-- Tải module script
local RewardManager = require(ServerStorage.RewardManager)
-- Gọi hàm từ module script
local coins = RewardManager.getCoinReward("easy")
print("Nên thưởng " .. coins .. " xu")

Khắc phục sự cố chung

Một số mẹo ở đây giải quyết các vấn đề phổ biến khi làm việc với module scripts. Hãy nhớ rằng module scripts 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, hãy xem hướng dẫn kỹ thuật hơn về Module Scripts.

Vấn đề: Nhận 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 module script nơi nó được tải. require() phải bao gồm chính xác đường dẫn và chính tả của module script, có thể được đặt tên khác với bảng module.

Vấn đề: Nhận thông báo lỗi bao gồm: "attempt to index global".

  • Trong bất kỳ script nào sử dụng module script, hãy đảm bảo nó được tải bằng hàm require(). Nếu không, script đó không thể sử dụng các hàm và biến từ module script.

Tóm tắt

Module scripts trong Roblox là một phương pháp mà các lập trình viên sử dụng để tổ chức và tái sử dụng mã. Một module script thường được lưu trữ trong ServerStorage (hoặc ReplicatedStorage cho các tương tác dựa trên khách hàng). Từ đó, các script khác có thể gọi các hàm và biến được lưu trữ trong module script đó.

Ví dụ, một trò chơi có thể thưởng điểm cho người chơi khi thu thập các đối tượng. Một module script có thể xử lý mã để tặng điểm. Sau đó, các script cho các loại đối tượng khác nhau chỉ cần gọi hàm module script. Điều này giảm thiểu nhu cầu tái sử dụng mã giữa các script, làm cho mã dễ hiểu và duy trì hơn.

©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.