Per molti sviluppatori, la sfida fondamentale nell'adattarsi alla scrittura di script in Roblox è l'importanza della posizione del file e della proprietà Script.RunContext. A seconda del tipo di script, della posizione nell'Esplora risorse e del contesto di esecuzione, gli script possono comportarsi in modo molto diverso. Alcuni metodi potrebbero fallire, gli oggetti nel tuo gioco potrebbero essere inaccessibili oppure 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 di 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 Workspace o ServerScriptService.
- Se cambi il contesto di esecuzione dello script in Server, ora può essere eseguito anche in ReplicatedStorage, ma non è consigliato. I contenuti di quella posizione vengono replicati ai client, quindi è una cattiva posizione 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 nei 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 risorse e modifica il valore nella finestra delle Proprietà.

Raccomandazioni
Metti gli script client in ReplicatedStorage con un RunContext di Client insieme ai ModuleScripts solo per client.
Quando fai debug in Studio, puoi fare clic sulle righe nella finestra Output e andare a ReplicatedStorage.YourScript (la posizione stabile dello script) piuttosto che a Players.YourName.PlayerScripts.YourScript (la posizione effimera in cui lo script è stato copiato durante l'esecuzione).
Metti gli script server in ServerScriptService con un RunContext di Server insieme ai ModuleScripts solo per server.
Per condividere codice tra script server e client, utilizza ModuleScripts in ReplicatedStorage.
Metti il numero minimo di script client (come uno script di caricamento) in ReplicatedFirst con un RunContext di Client. Per saperne di più, consulta Ordine di replica.
Utilizza LocalScripts in StarterCharacterScripts, StarterPlayerScripts, StarterGui e StarterPack.
Posizioni degli script
| Location | Description |
|---|---|
| Workspace | Rappresenta il mondo 3D del gioco. Questa posizione è ideale per gli script del server che si collegano direttamente agli oggetti e controllano il loro comportamento. |
| ReplicatedFirst | Contiene 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 mostrare una schermata di caricamento. |
| ReplicatedStorage | Contiene oggetti che vengono replicati sia al client che al server. Questa posizione è ideale per ModuleScripts che desideri utilizzare sia sul server che sul client. LocalScripts non vengono eseguiti da questa posizione, ma Scripts con un RunContext di Client sì. |
| ServerScriptService | Contiene script del server. Questa posizione è ideale per script che devono accedere a funzionalità o oggetti lato server, come la logica di gioco e lo storage cloud. |
| ServerStorage | Contiene 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 ModuleScripts lato server qui. |
| StarterPlayer ⟩ StarterCharacterScripts | Contiene LocalScripts che vengono eseguiti quando il personaggio appare. |
| StarterPlayer ⟩ StarterPlayerScripts | Contiene LocalScripts generici che vengono eseguiti quando il giocatore entra nel gioco. |
| StarterGui | Contiene elementi GUI che il client visualizza quando carica il gioco. LocalScripts possono essere eseguiti da questa posizione. Questa posizione è ideale per script che modificano l'interfaccia utente del gioco, come aggiungere pulsanti, menu e pop-up. |
| StarterPack | Contiene generalmente solo Tools, ma può includere anche LocalScripts per configurare gli zaini dei giocatori. |
Questa immagine mostra quali posizioni della finestra Esplora risorse possono contenere script client. Ricorda, ReplicatedFirst e ReplicatedStorage possono contenere Scripts con un RunContext di Client, mentre i contenitori Starter[] dovrebbero utilizzare LocalScripts.

Struttura del progetto di esempio
Il progetto di riferimento Plant mostra come potresti organizzare il tuo codice in un gioco grande e complesso.
Di particolare rilievo è come memorizza la maggior parte del suo codice come ModuleScripts riutilizzabili in ReplicatedStorage e ServerStorage.