Man mano che i progetti diventano complessi, è importante pensare a come sono organizzati gli script. Buone pratiche di organizzazione possono garantire che il codice non venga duplicato tra gli script o diventi difficile da gestire.
Un modo migliore per organizzare e riutilizzare il codice è con script modulo, un tipo unico di script che memorizza un insieme di funzioni e variabili progettate per soddisfare uno scopo condiviso, come gestire i soldi dei giocatori o i nemici. Il codice all'interno degli script modulo può essere utilizzato da altri script. In questo modo, puoi chiamare la stessa funzione che fornisce monete da più script differenti ogni volta che un giocatore completa una missione o trova un oggetto da raccogliere.
Memorizzando il codice comunemente usato in script modulo, si semplifica la manutenzione e l'organizzazione del codice, poiché le modifiche devono essere apportate solo a uno script modulo, anziché aggiornare più script.
Fondamenti degli script modulo
Gli script modulo sono in realtà un proprio oggetto separato rispetto agli oggetti script. In Roblox, gli script modulo possono essere contrassegnati con un'icona viola.
Creare uno script modulo
Gli ScriptModulo vengono comunemente collocati in ServerScriptService quando utilizzati da script lato server e in ReplicatedStorage quando utilizzati da script client locali (come interazioni GUI).
- Crea uno ScriptModulo in ServerScriptService.

Struttura degli script modulo
Quando creato, ogni script modulo inizia con il codice sottostante:
local Module = {}return Module
La riga local Module = {} crea una tabella, o contenitore di codice, dove possono essere memorizzate le funzioni e le variabili condivise del modulo. Questa tabella dovrebbe essere rinominata in base allo scopo del modulo, come RewardManager o ParticleController. A differenza di altre variabili che sono in camel case (myVariable), le tabelle dei moduli sono raccomandate per usare il pascal case e iniziare maiuscole (MyModule).
local RewardManager = {}return RewardManager
Affinché altri script possano utilizzare le funzioni o le variabili non locali di un modulo, ogni modulo termina con return MyModule. Ogni volta che un altro script cerca di ottenere codice dal modulo, return consente a quello script di accedere al codice memorizzato all'interno della tabella del modulo.
Aggiungere a script modulo
Per aggiungere una funzione o una variabile al modulo che può essere utilizzata in un altro script, digita il nome della tabella del modulo, seguito da un punto e il nome della funzione o variabile, come in TestModule.myVariable. Usare l'operatore punto è un altro modo per aggiungere codice a una tabella, consentendo ad altri script di accedere a quel codice ogni volta che la tabella del modulo viene restituita.
local TestModule = {}
-- Aggiunge una variabile alla tabella 'TestModule'
TestModule.myVariable = 100
-- Aggiunge una funzione alla tabella 'TestModule'
function TestModule.doTask(player)
-- Codice segnaposto
end
return TestModule
Ambito negli script modulo
Affinché una funzione o una variabile di un modulo possa essere utilizzata in uno script esterno, non digitare local.
Digitare local davanti a variabili e funzioni significa che sono utilizzabili solo da quello script. Anche se questa è una buona pratica per la maggior parte degli script per ridurre errori e problemi, non puoi rendere locali le funzioni e le variabili degli script modulo.
Qualsiasi codice utilizzato solo da quello script modulo dovrebbe comunque includere local. Ad esempio, il codice qui sotto include la variabile locale difficultyModifier, che può essere utilizzata solo in quello script modulo, e la funzione getCoinReward(), che può essere utilizzata negli script esterni al modulo.
local RewardManager = {}
-- Utilizzabile solo nello script modulo
local rewardCoins = 50
-- Utilizzabile solo nello script modulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizzabile in altri script
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Utilizzare i moduli in altri script
Di per sé, uno script modulo non può eseguire codice: deve essere caricato in un altro script utilizzando la parola chiave require(). La funzione require() accetta un argomento, la posizione dello script modulo nell'Explorer.
Per utilizzare un modulo, in uno script separato, imposta una variabile uguale a require(moduleScript).
local MyModule = require(ServerStorage.ModuleScript)
Ora, la variabile MyModule contiene la tabella del modulo creata in quello script modulo. Per utilizzare funzioni e variabili da quella tabella, digita il nome della variabile, seguito da un punto e dal nome esatto di cosa utilizzare in quello script modulo, come MyModule.myFunction(). Quando lo script viene eseguito e raggiunge quella riga, accederà a quella specifica funzione o variabile memorizzata nella tabella del modulo.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Esempio di RewardManager
ModuleScript - RewardManager
local RewardManager = {}
-- Utilizzabile solo nello script modulo
local rewardCoins = 50
-- Utilizzabile solo nello script modulo
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilizzabile in altri script
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScriptlocal ServerStorage = game:GetService("ServerStorage")-- Carica lo script modulolocal RewardManager = require(ServerStorage.RewardManager)--Chiama la funzione dallo script modulolocal coins = RewardManager.getCoinReward("easy")print("Dovrebbe premiare " .. coins .. " monete")
Risoluzione dei problemi generali
Alcuni dei suggerimenti qui affrontano problemi comuni quando si lavora con gli script modulo. Tieni presente che gli script modulo possono essere un argomento complicato con più sfumature. Per ulteriori dettagli, consulta questa guida più tecnica sugli Script Modulo.
Problema: Ottieni un messaggio di errore che include: "Possibile rilascio infinito" o "non è un membro valido".
- Controlla l'ortografia dello script modulo dove viene caricato. require() deve includere il percorso esatto e l'ortografia dello script modulo, che potrebbe avere un nome diverso dalla tabella del modulo.
Problema: Ottieni un messaggio di errore che include: "tentativo di indicizzazione globale".
- In qualsiasi script che utilizza uno script modulo, assicurati che sia caricato utilizzando la funzione require(). Se no, quello script non può utilizzare funzioni e variabili dallo script modulo.
Riepilogo
Gli script modulo in Roblox sono un metodo che i programmatori usano per organizzare e riutilizzare il codice. Uno script modulo è spesso memorizzato in ServerStorage (o ReplicatedStorage per interazioni basate su client). Da lì, altri script possono chiamare funzioni e variabili memorizzate in quello script modulo.
Ad esempio, un'esperienza potrebbe premiare punti ai giocatori per aver raccolto oggetti. Uno script modulo può gestire il codice per assegnare punti. Poi, script per diversi tipi di oggetti possono semplicemente chiamare la funzione dello script modulo. Ciò riduce la necessità di riutilizzare codice tra script, rendendo il codice più facile da comprendere e mantenere.