À mesure que les projets deviennent complexes, il devient important de réfléchir à la manière dont les scripts sont organisés.De bonnes pratiques d'organisation peuvent garantir que le code ne soit pas dupliqué entre les scripts ou devienne difficile à gérer.
Un meilleur moyen d'organiser et de réutiliser le code est avec scripts de module , un type de script unique qui stocke un ensemble de fonctions et de variables destinées à répondre à un but partagé, comme la gestion de l'argent des joueurs ou des ennemis.Le code dans les scripts de module peut être utilisé par d'autres scripts.De cette façon, vous pouvez appeler la même fonction qui donne des pièces à partir de plusieurs scripts différents chaque fois qu'un joueur termine une quête ou trouve une récupération.
En stockant le code couramment utilisé dans les scripts de module, cela facilite la maintenance et l'organisation du code puisque les modifications ne doivent être apportées qu'à un script de module, plutôt que de mettre à jour plusieurs scripts.
Base de script de module
Les scripts de module sont en fait leur propre objet séparé par rapport aux objets de script.Dans Roblox, les scripts de module peuvent être désignés par une icône violette .
Créer un script de module
ModuleScripts sont généralement placés dans ServerScriptService lorsqu'ils sont utilisés par des scripts côté serveur et ReplicatedStorage lorsqu'ils sont utilisés par des scripts locaux côté client (tels que les interactions GUI).
- Créez un ModuleScript dans ServerScriptService .

Structure des scripts de module
Lorsqu'il est créé, chaque script de module commence par le code suivant :
local Module = {}return Module
La ligne local Module = {} crée une table ou un conteneur de code dans lequel les fonctions et les variables partagées du module peuvent être stockées.Cette table devrait être renommée pour le but du module, comme RewardManager ou ParticleController .À l'inverse d'autres variables qui sont en camel case ( myVariable ), les tables de module sont recommandées d'utiliser la case pascal et de commencer en majuscules ( MyModule ).
local RewardManager = {}return RewardManager
Ainsi, d'autres scripts peuvent utiliser les fonctions ou les variables non locales d'un module, chaque module se termine par return MyModule .Chaque fois qu'un autre script essaie d'obtenir du code du module, renvoie ce code d'accès au script stocké à l'intérieur de la table du module.
Ajouter aux scripts de module
Pour ajouter une fonction ou une variable au module qui peut être utilisée dans un autre script, saisissez le nom de la table du module, suivi d'un point, puis le nom de la fonction ou de la variable, comme dans TestModule.myVariable .L'utilisation de l'opérateur point est une autre façon d'ajouter du code dans une table, permettant à d'autres scripts d'accéder à ce code chaque fois que la table du module est retournée.
local TestModule = {}
-- Ajoute une variable à la table 'TestModule'
TestModule.myVariable = 100
-- Ajoute une fonction à la table 'TestModule'
function TestModule.doTask(player)
-- codede remplacement
end
return TestModule
Scope dans les scripts de module
Pour qu'une fonction ou une variable de module soit utilisée dans un script externe, ne pas écrire local .
Taper devant les variables et les fonctions signifie qu'elles ne sont utilisables que par ce script.Bien que ce soit une bonne pratique pour la plupart des scripts pour réduire les erreurs et résoudre les problèmes, vous ne pouvez pas rendre les fonctions et les variables du script de module locales.
Tout code utilisé seulement par le script de ce module devrait toujours inclure local .Par instance, le code ci-dessous inclut la variable locale difficultyModifier , qui ne peut être utilisée que dans le script du module, et la fonction getCoinReward() , qui peut être utilisée dans les scripts en dehors du module.
local RewardManager = {}
-- Utilisable uniquement dans le script du module
local rewardCoins = 50
-- Utilisable uniquement dans le script du module
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilisable dans d'autres scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Utiliser des modules dans d'autres scripts
Par lui-même, un script de module ne peut pas exécuter du code — il doit être chargé dans un autre script en utilisant le mot-clé require() .La fonction require() accepte un argument, l'emplacement du script du module dans l'Explorer.
Pour utiliser un module, dans un script séparé, définissez une variable égale à require(moduleScript).
local MyModule = require(ServerStorage.ModuleScript)
Maintenant, la variable MyModule contient la table de module créée dans ce script de module.Pour utiliser les fonctions et les variables de cette table, saisissez le nom de la variable, suivi d'un point, puis le nom exact de ce qui doit être utilisé dans le script du module, comme MyModule.myFunction() .Lorsque le script s'exécute et atteint cette ligne, il accède à cette fonction ou variable spécifique stockée dans la table du module.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Exemple de gestionnaire de récompenses
ModuleScript - Gestionnaire de récompenses
local RewardManager = {}
-- Utilisable uniquement dans le script du module
local rewardCoins = 50
-- Utilisable uniquement dans le script du module
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Utilisable dans d'autres scripts
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Charger le script du modulelocal RewardManager = require(ServerStorage.RewardManager)--Fonction d'appel du script du modulelocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Dépannage général
Certains des conseils ici abordent des problèmes communs lors du travail avec des scripts de module.Gardez à l'esprit que les scripts de module peuvent être un sujet compliqué avec plus de nuance.Pour plus de détails, voir ce guide plus technique sur scripts de module. Problème : Obtenez un message d'erreur incluant : "Infinite yield possible" ou "not a valid member" .
Vérifiez l'orthographe du script du module où il est chargé.require() doit inclure le chemin et l'orthographe exacts du script du module, qui peut être nommé différemment de la table du module. Problème : Obtenez un message d'erreur comprenant : "attempt to index global" .
Dans tous les scripts utilisant un script de module, assurez-vous qu'il est chargé en utilisant la fonction require().Si ce n'est pas le cas, ce script ne peut pas utiliser les fonctions et les variables du script du module.
Sommaire
Les scripts de module dans Roblox sont une méthode utilisée par les codificateurs pour organiser et réutiliser le code.Un script de module est souvent stocké dans ServerStorage (ou ReplicatedStorage pour les interactions client-basées).À partir de là, d'autres scripts peuvent appeler des fonctions et des variables stockées dans ce script de module.
Par instance, un jeu peut attribuer des points aux joueurs pour la collecte d'objets.Un script de module peut gérer du code pour donner des points.Ensuite, les scripts pour différents types d'objets peuvent simplement appeler la fonction script du module.Cela réduit le besoin de réutiliser le code entre les scripts, ce qui rend le code plus facile à comprendre et à maintenir.