Intro agli script del modulo

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Mentre i progetti diventano complessi, diventa importante pensare a come gli script sono organizzati. Le buone pratiche di organizzazione possono garantire che il codice non sia duplicato tra gli script, o diventa difficile da Gestire.

Un modo migliore per organizzare e riutilizzare il codice è con script del modulo , un tipo unico di script che memorizza un insieme di funzioni e variabili progettate per soddisfare uno scopo condiviso, come la gestione del denaro del giocatore o dei nemici. Il codice all'interno degli script del modulo può essere utilizzato da altri script. In questo modo, puoi chiamare la stessa funzione che dà monete da più script diversi ogni volta che un giocatore finisce una missione o trova un pick

memorizzando il codice comunemente utilizzato nei script del modulo, rende più semplice mantenere e organizzare il codice poiché le modifiche sono necessarie solo a uno script del modulo, non aggiornare più script.

Basi della programmazione dei moduli

Gli script del modulo sono in realtà il loro proprio oggetto separato rispetto agli oggetti script. In Roblox, gli script del modulo possono essere designati con un'Icona porpora .

Creazione di uno script del modulo

ModuleScripts sono comunemente posizionati in ServerScriptService quando sono utilizzati dagli script lato server e ReplicatedStorage quando sono utilizzati dagli script locali lato client (come le interazioni GUI).

  1. Crea un ModuleScript in ServerStorage .

Structure of Module Scripts

Quando viene creato, ogni script del modulo inizia con il codice seguente:


local Module = {}
return Module

La linea local Module = {} crea una tabella, o container of codice, in cui le funzioni e le variabili condivise del modulo possono essere memorizzate. Questa tabella dovrebbe essere rinomdata al scopo del modulo, come RewardManager o ParticleController . A differenza di


local RewardManager = {}
return RewardManager

Così altri script possono utilizzare le funzioni o le variabili non locali di un modulo, ogni modulo termina con il ritorno MyModule . Ogni volta che un altro script cerca di ottenere il codice dal modulo, il ritorno consente a quel script di accedere al codice memorizzato nella tabella del modulo.

Aggiungere a Script del Modulo

Per aggiungere una funzione o una variabile al modulo che può essere utilizzato 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 . Utilizzando l'operatore punto, è un altro modo di aggiungere il codice in una tabella, consentendo ad altri script di accedere a quel codice ogni volta che la tabella viene restituita.


local TestModule = {}
-- Aggiunge una variabile alla tabella 'TestModule'
TestModule.myVariable = 100
-- Aggiunge una funzione alla tabella 'TestModule'
function TestModule.doTask(player)
-- codicesegnaposto
end
return TestModule

Scopo negli script del modulo

Per una funzione o una variabile del modulo da utilizzare in uno script esterno, non scrivere localmente .

Digitare local davanti alle variabili e alle funzioni vuol dire che sono solo usabili da quel script. Mentre questa è una buona pratica per la maggior parte degli script per ridurre gli errori e risolvere i problemi, non puoi rendere le funzioni e le variabili del modulo script locali.

Qualsiasi codice utilizzato solo da quel script del modulo dovrebbe ancora includere local . Ad esempio, il codice seguente include la variabile locale difficultyModifier , che può essere utilizzata solo in quel script del modulo, e la funzione 1> GCoinReward()1> , che può essere utilizzata in script esterni al modulo.


local RewardManager = {}
-- Utilizzabile solo nel script del modulo
local rewardCoins = 50
-- Utilizzabile solo nel script del 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

Uso dei moduli in altri script

Da solo, uno script del modulo non può eseguire il codice — deve essere caricato in un altro script usando il nome del keyword require() . La funzione require() accetta un argomento, la posizione dello script del 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 quel script del modulo. Per utilizzare le funzioni e le variabili da quella tabella, digita il nome della variabile, seguito da un punto, e il nome esatto di ciò che viene utilizzato in quel script del modulo, come MyModule.myFunction() . Quando lo script viene eseguito e raggiunge quella linea, accede a quella funzione o variabile specifica memorizzata nella tab


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

RewardManager Esempio

ModuleScript - RewardManager

local RewardManager = {}
-- Utilizzabile solo nel script del modulo
local rewardCoins = 50
-- Utilizzabile solo nel script del 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 - TreasureChestScript

local ServerStorage = game:GetService("ServerStorage")
-- Carica script del modulo
local RewardManager = require(ServerStorage.RewardManager)
--Chiama la funzione dallo script del modulo
local coins = RewardManager.getCoinReward("easy")
print("Should award " .. coins .. " coins")

Risoluzione dei problemi generali

Alcuni dei suggerimenti qui affrontano alcuni problemi comuni quando si lavora con gli script del modulo. Tieni presente che gli script del modulo possono essere un argomento complicato con più sfumature. Per ulteriori dettagli, vedi questa guida più tecnica su Script del modulo . Problema: Ottieni un messaggio di errore che include: "Infinite yield possible" o «non a valid Membri.

  • Controlla lo spelling dello script del modulo dove viene caricato. require() deve includere la corretta path e spelling dello script del modulo, che potrebbe essere chiamato in modo diverso dalla tabella del modulo. Problema: Ottieni un messaggio di errore tra cui: "attempt to index global" .

  • In qualsiasi script che utilizza uno script del modulo, assicurati che sia caricato utilizzando la funzione require() . Se non è, lo script non può utilizzare funzioni e variabili dallo script del modulo.

Panoramica

Script del modulo in Roblox sono uno strumento per i codici che i moduli utilizzano per organizzare e riutilizzare il codice. uno script del modulo viene spesso memorizzato in ServerStorage (o ReplicatedStorage per interazioni basate sul client). Da lì, altri script sono in grado di chiamare funzioni e variabili memorizzate in quel modulo script.

Ad esempio, un gioco può assegnare punti ai giocatori per la raccolta di oggetti. Un script del modulo può gestire il codice per dare i punti. Quindi, gli script per diversi tipi di oggetti possono semplicemente chiamare la funzione del modulo script. Ciò riduce la necessità di riutilizzare il codice tra gli script, rendendo il codice più facile da capire e mantenere.