Pour de nombreux développeurs, le défi fondamental d'adapter au scriptage de Roblox est l'importance de l'emplacement du fichier et de la propriété Script.RunContext.En fonction du taperde script, de l'emplacement dans l'Exploreret du contexte d'exécution, les scripts peuvent se comporter très différemment.Certains appels de méthode peuvent échouer, les objets de votre expérience peuvent être inaccessibles ou les scripts peuvent ne pas fonctionner du tout.
La raison de cette complexité est que les expériences Roblox sont multijoueurs par défaut.Les scripts ont besoin de la capacité de s'exécuter uniquement sur le serveur, de s'exécuter uniquement sur le client ou d'être partagés sur les deux.L'évolution de la plate-forme Roblox au fil du temps a encore compliqué la situation.
Types de scripts
Roblox a trois types de scripts :
- Script - Code qui s'exécute sur le serveur ou le client, en fonction de son emplacement et de sa propriété Script.RunContext.
- LocalScript - Code qui ne s'exécute que sur le client. N'a pas de contexte d'exécution.
- ModuleScript - Code que vous pouvez réutiliser dans d'autres scripts. N'a pas de contexte d'exécution.
Lorsque vous créez un Script, son contexte d'exécution par défaut est Legacy, ce qui signifie qu'il est a) un script côté serveur et b) qu'il ne s'exécute que si il se trouve dans un conteneur serveur, comme Workspace ou ServerScriptService .
- Si vous changez le contexte d'exécution du script en Server, il peut désormais s'exécuter également en ReplicatedStorage, mais ce n'est pas recommandé.Le contenu de cet emplacement est répliqué aux clients, ce qui en fait un mauvais emplacement pour les scripts côté serveur.
- Si vous changez le contexte d'exécution du script en Client, il peut s'exécuter en ReplicatedStorage.Il peut également s'exécuter dans StarterCharacterScripts et StarterPlayerScripts .Les conteneurs de démarrage sont cependant copiés aux clients, de sorte que le script original et la copie s'lancer, ce qui n'est pas souhaitable.
Pour modifier un contexte d'exécution de script, sélectionnez-le dans la fenêtre Explorateur et modifiez la valeur dans la fenêtre Propriétés.

Recommandations
L'utilisation de Server et de Client valeurs pour RunContext élimine l'ambiguïté sur la façon dont les scripts s'exécutent et peut aider à garder votre projet organisé.Les meilleurs cas d'utilisation pour les valeurs non par défaut RunContext sont :
- Scripts clients que vous souhaitez exécuter à partir de ReplicatedStorage ou ReplicatedFirst .
Pour partager du code entre le serveur et les scripts du client, utilisez ModuleScripts dans ReplicatedStorage.
Utilisez LocalScripts dans StarterCharacterScripts , StarterPlayerScripts , StarterGui , et StarterPack .
Emplacements de script
Emplacement | Description :--- | :--- Espace de travail | Représente le monde du jeu.Cet emplacement fonctionne bien pour les scripts du serveur qui s'attachent directement aux objets et contrôlent leur comportement.ReplicatedFirst | Contient des objets qui se répliquent vers le client avant toute autre chose.Cet emplacement est idéal pour le minimum absolu de objets et de scripts clients nécessaires pour afficher une page de chargement.ReplicatedStorage | Contient des objets qui sont répliqués à la fois au client et au serveur.Cet emplacement est idéal pour Class.ModuleScript\|ModuleScripts que vous souhaitez utiliser à la fois sur le serveur et le client.Class.LocalScript\|LocalScripts ne s'exécute pas à partir de cet emplacement, mais Class.Script\|Scripts avec un contexte d'exécution de Client le fait.ServerScriptService | Contient des scripts serveur.Ce lieu est idéal pour les scripts qui doivent accéder à la fonctionnalité côté serveur ou aux objets, tels que la logique du jeu et le stockage des données dans le cloud.ServerStorage | Contient des objets côté serveur.Cet emplacement est idéal pour de grands objets qui n'ont pas besoin d'être immédiatement répliqués aux clients lorsqu'ils rejoignent une expérience.Les scripts ne s'exécutent pas à partir de cet emplacement, mais vous pouvez stocker côté serveur Class.ModuleScript\|ModuleScripts ici.StarterPlayer.StarterCharacterScripts | Contient Class.LocalScript\|LocalScripts qui s'exécute lorsque le personnage apparaît.StarterPlayer.StarterPlayerScripts | Contient des scripts à usage général Class.LocalScript\|LocalScripts qui s'exécutent lorsque le joueur rejoint l'expérience.StarterGui | Contient des éléments GUI que le client affiche lorsqu'il charge le jeu.Class.LocalScript\|LocalScripts peut s'exécuter à partir de cet emplacement.Ce lieu est idéal pour les scripts qui modifient l'interface utilisateur du jeu, tels que l'ajout de boutons, de menus et de pop-ups.StarterPack | Contient généralement seulement Class.Tool\|Tools, mais peut également inclure Class.LocalScript\|LocalScripts pour configurer les sacs à dos des joueurs.
Cette image montre les emplacements de fenêtre Explorateur qui peuvent contenir des scripts clients.Rappelez-vous, ReplicatedFirst et ReplicatedStorage peuvent contenir Scripts avec un RunContext de Client , alors que les conteneurs Starter[] doivent utiliser LocalScripts .

Structure de projet d'exemple
Le projet de référence Plante montre comment vous pourriez organiser votre code dans une expérience large et complexe.
De particulière note est la façon dont il stocke la grande majorité de son code réutilisable ModuleScripts dans ReplicatedStorage et ServerStorage .