Tipi di script e posizioni

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

Per molti sviluppatori, la sfida fondamentale nell'adattarsi alla programmazione in Roblox è l'importanza della posizione del file e della proprietà Script.RunContext. A seconda del tipo di script, della posizione nell'Esplora e del contesto di esecuzione, gli script possono comportarsi in modo molto diverso. Alcuni metodi potrebbero fallire, oggetti nel tuo gioco potrebbero essere inaccessibili o gli script potrebbero non essere eseguiti affatto.

La ragione di questa complessità è che i giochi Roblox sono multiplayer per impostazione predefinita. Gli script devono avere la possibilità di essere eseguiti solo sul server, solo sul client o essere condivisi tra entrambi. L'evoluzione della piattaforma Roblox nel tempo ha ulteriormente complicato la situazione.

Tipi di script

Roblox ha tre tipi di script:

  • Script - Codice che viene eseguito sia sul server che sul client, a seconda della sua posizione e della proprietà Script.RunContext.
  • LocalScript - Codice che viene eseguito solo sul client. Non ha un contesto di esecuzione.
  • ModuleScript - Codice che puoi riutilizzare in altri script. Non ha un contesto di esecuzione.

Quando crei un Script, il suo contesto di esecuzione predefinito è Legacy, il che significa che a) è uno script lato server e b) viene eseguito solo se si trova in un contenitore server, come ServerScriptService o Workspace.

  • Se cambi il contesto di esecuzione dello script in Server, ora può anche essere eseguito in ReplicatedStorage, ma non lo raccomandiamo. I contenuti di quella posizione vengono replicati ai client, quindi è una posizione poco adatta per gli script lato server.
  • Se cambi il contesto di esecuzione dello script in Client, può essere eseguito in ReplicatedStorage. Può anche essere eseguito in StarterCharacterScripts e StarterPlayerScripts. Tuttavia, i contenitori di avvio vengono copiati ai client, quindi lo script originale e la copia vengono eseguiti, il che non è desiderabile.

Per cambiare il contesto di esecuzione di uno script, selezionalo nell'Esplora e cambia il valore nella finestra Proprietà.

Proprietà RunContext indicata per uno Script.

Raccomandazioni

  • Metti un singolo Script con un RunContext di Client in ReplicatedStorage.

  • Metti un singolo Script con un RunContext di Server in ServerScriptService.

  • Usa ModuleScripts per quanto più codice client e server possibile. Richiedi questi moduli dal tuo script client e dal tuo script server.

    Questo approccio fornisce al tuo codice un unico punto di ingresso sia sul lato client che sul lato server, il che semplifica l'organizzazione e rende facile isolare o disabilitare moduli problematici. Aggiungi una funzione start() a ciascun ModuleScript in modo che tutti i moduli possano caricarsi prima di iniziare a eseguire il loro codice:

    Esempio di script server
    --!strict
    local ServerScriptService = game:GetService("ServerScriptService")
    local SampleModule = require(ServerScriptService.SampleModule)
    local AnotherSampleModule = require(ServerScriptService.AnotherSampleModule)
    SampleModule.start()
    AnotherSampleModule.start()
    Esempio di modulo
    --!strict
    local CollectionService = game:GetService("CollectionService")
    local NPC_TAG = "npc"
    local SampleModule = {}
    local function setUpNpc(npc: Instance)
    -- inizializza ogni NPC
    end
    local function cleanUpNpc(npc: Instance)
    -- esegui quando si attiva l'evento
    end
    function SampleModule.start() -- aggiungi la funzione alla tabella
    -- ciclo di esempio per la configurazione basata sui tag
    for _, npc in CollectionService:GetTagged(NPC_TAG) do
    setUpNpc(npc)
    end
    -- esegui funzioni quando si attivano eventi
    CollectionService:GetInstanceAddedSignal(NPC_TAG):Connect(setUpNpc)
    CollectionService:GetInstanceRemovedSignal(NPC_TAG):Connect(cleanUpNpc)
    end
    return SampleModule
  • Per condividere codice, usa ModuleScripts in ReplicatedStorage e richiedili sia nel tuo script client che nel tuo script server.

  • Se necessario per il tuo gioco, ripeti lo stesso schema in ReplicatedFirst con un singolo script client e un numero minimo di ModuleScripts per implementare una schermata di caricamento. Per saperne di più su ReplicatedFirst, consulta Ordine di replicazione.

  • Usa LocalScripts con parsimonia. Se devi usarli, mettili in StarterCharacterScripts, StarterPlayerScripts, StarterGui o StarterPack.

    Gli script in questi contenitori vengono clonati nei contenitori dei giocatori anziché essere eseguiti da un'unica posizione, il che può complicare il debug. Usare ReplicatedStorage per il codice client ti consente di fare clic sulle righe nella finestra Output e andare a ReplicatedStorage.YourScript (la posizione stabile dello script) anziché a Players.YourName.PlayerScripts.YourLocalScript (la posizione effimera in cui lo script è stato copiato durante l'esecuzione).

  • Evita di allegare script direttamente alle istanze in Workspace. Invece, tagga le istanze e usa CollectionService per lavorare con esse da un singolo ModuleScript.

    L'eccezione principale è se distribuisci modelli o pacchetti nel Creator Store. In tal caso, potresti dover includere script all'interno della gerarchia delle istanze; specifica un RunContext per ogni script per rimuovere ambiguità su come viene eseguito. Impostare esplicitamente questa proprietà rende i modelli e i pacchetti più propensi a funzionare correttamente da una varietà di posizioni.

Esempio di struttura del progetto

Il progetto di riferimento Plant mostra come potresti organizzare il tuo codice in un gioco grande e complesso. Memorizza la stragrande maggioranza del suo codice come ModuleScripts riutilizzabili.

Posizioni degli script

LocationDescription
WorkspaceRappresenta il mondo 3D del gioco. Può eseguire script server che si attaccano direttamente agli oggetti e controllano il loro comportamento.
ReplicatedFirstContiene oggetti che si replicano al client prima di qualsiasi altra cosa. Questa posizione è ideale per il set minimo assoluto di oggetti e script client necessari per visualizzare una schermata di caricamento.
ReplicatedStorageContiene oggetti che vengono replicati sia al client che al server. Questa posizione è ideale per Scripts con un RunContext di Client, ModuleScripts client e ModuleScripts che desideri utilizzare sia sul server che sul client. LocalScripts non vengono eseguiti da questa posizione.
ServerScriptServiceContiene script server. Questa posizione è ideale per script che devono accedere a funzionalità o oggetti lato server, come la logica di gioco e l'archiviazione cloud.
ServerStorageContiene oggetti lato server. Questa posizione è ideale per oggetti di grandi dimensioni che non devono essere immediatamente replicati ai client quando si uniscono a un gioco. Gli script non vengono eseguiti da questa posizione, ma puoi memorizzare qui ModuleScripts lato server.
StarterPlayer ⟩ StarterCharacterScriptsContiene LocalScripts che vengono eseguiti quando il personaggio appare.
StarterPlayer ⟩ StarterPlayerScriptsContiene LocalScripts che vengono eseguiti quando il giocatore si unisce al gioco.
StarterGuiContiene elementi GUI che il client visualizza quando carica il gioco. LocalScripts possono essere eseguiti da questa posizione.
StarterPackContiene generalmente solo Tools, ma può includere anche LocalScripts per configurare gli zaini dei giocatori.

Questa immagine mostra quali posizioni nella finestra Esplora possono contenere script client. Ricorda, ReplicatedFirst e ReplicatedStorage possono contenere Scripts con un RunContext di Client, mentre i contenitori Starter[] dovrebbero utilizzare LocalScripts.

Diagramma che mostra quali posizioni degli script vengono eseguite sui client.
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.