Man mano che i progetti diventano complessi, diventa 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 gli script modulari, un tipo unico di script che memorizza un insieme di funzioni e variabili progettate per soddisfare uno scopo condiviso, come gestire il denaro dei giocatori o i nemici. Il codice all'interno degli script modulari può essere utilizzato da altri script. In questo modo, puoi chiamare la stessa funzione che fornisce monete da più script diversi ogni volta che un giocatore completa una missione o trova un oggetto.
Memorizzando il codice comunemente utilizzato negli script modulari, diventa più facile mantenere e organizzare il codice poiché le modifiche devono essere apportate solo a uno script modulare, piuttosto che aggiornare più script.
Nozioni di base sugli script modulari
Gli script modulari sono in realtà un proprio oggetto separato rispetto agli oggetti script. In Roblox, gli script modulari possono essere contrassegnati con un'icona viola.
Creare uno script modulare
Gli ScriptModuli vengono comunemente posizionati in ServerScriptService quando utilizzati da script lato server e in ReplicatedStorage quando utilizzati da script locali lato client (come le interazioni GUI).
- Crea un ModuleScript in ServerScriptService.

Struttura degli script modulari
Quando creato, ogni script modulare inizia con il codice sottostante:
local Module = {}
return ModuleLa 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), si consiglia di utilizzare il pascal case e iniziare con una lettera maiuscola per le tabelle dei moduli (MyModule).
local RewardManager = {}
return RewardManagerAffinché 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, il return consente a quello script di accedere al codice memorizzato all'interno della tabella del modulo.
Aggiungere agli script modulari
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 dal nome della funzione o variabile, come in TestModule.myVariable. Utilizzare 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 TestModuleAmbito negli script modulari
Affinché una funzione o una variabile del 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 le funzioni e le variabili degli script modulari locali.
Qualsiasi codice utilizzato solo da quello script modulare dovrebbe comunque includere local. Ad esempio, il codice sottostante include la variabile locale difficultyModifier, che può essere utilizzata solo in quello script modulare, e la funzione getCoinReward(), che può essere utilizzata in script esterni al modulo.
local RewardManager = {}
-- Utilizzabile solo nello script modulare
local rewardCoins = 50
-- Utilizzabile solo nello script modulare
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 RewardManagerUtilizzare i moduli in altri script
Di per sé, uno script modulare 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 modulare 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 modulare. Per utilizzare funzioni e variabili da quella tabella, digita il nome della variabile, seguito da un punto e dal nome esatto di ciò che utilizzare in quello script modulare, 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
local RewardManager = {}
-- Utilizzabile solo nello script modulare
local rewardCoins = 50
-- Utilizzabile solo nello script modulare
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 RewardManagerlocal ServerStorage = game:GetService("ServerStorage")
-- Carica lo script modulare
local RewardManager = require(ServerStorage.RewardManager)
-- Chiama la funzione dallo script modulare
local 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 modulari. Tieni presente che gli script modulari possono essere un argomento complicato con più sfumature. Per ulteriori dettagli, consulta questa guida più tecnica sugli Script Modulari.
Problema: Ricevi un messaggio di errore che include: "Infinite yield possible" o "not a valid member".
- Controlla l'ortografia dello script modulare dove viene caricato. require() deve includere il percorso e l'ortografia esatti dello script modulare, che potrebbe avere un nome diverso rispetto alla tabella del modulo.
Problema: Ricevi un messaggio di errore che include: "attempt to index global".
- In qualsiasi script che utilizza uno script modulare, assicurati che venga caricato utilizzando la funzione require(). In caso contrario, quello script non può utilizzare funzioni e variabili dallo script modulare.
Riepilogo
Gli script modulari in Roblox sono un metodo che i programmatori utilizzano per organizzare e riutilizzare il codice. Uno script modulare è spesso memorizzato in ServerStorage (o ReplicatedStorage per interazioni basate su client). Da lì, altri script possono chiamare funzioni e variabili memorizzate in quello script modulare.
Ad esempio, un gioco può premiare punti ai giocatori per aver raccolto oggetti. Uno script modulare può gestire il codice per dare punti. Poi, gli script per diversi tipi di oggetti possono semplicemente chiamare la funzione dello script modulare. Questo riduce la necessità di riutilizzare codice tra gli script, rendendo il codice più facile da comprendere e mantenere.