Introduction aux scripts de module

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

À mesure que les projets deviennent complexes, il devient important de réfléchir à la façon dont les scripts sont organisés. De bonnes pratiques d'organisation peuvent garantir que le code n'est pas dupliqué entre les scripts ou qu'il ne devient pas difficile à gérer.

Une meilleure façon d'organiser et de réutiliser le code est d'utiliser des scripts de module, un type unique de script qui stocke un ensemble de fonctions et de variables conçues pour répondre à un objectif commun, comme la gestion de l'argent des joueurs ou des ennemis. Le code à l'intérieur des 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 depuis plusieurs scripts différents chaque fois qu'un joueur termine une quête ou trouve un objet à ramasser.

En stockant le code couramment utilisé dans des scripts de module, cela facilite la maintenance et l'organisation du code, car les modifications n'ont besoin d'être apportées qu'à un seul script de module, plutôt que de mettre à jour plusieurs scripts.

Notions de base sur les scripts 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

Les ModuleScripts sont généralement placés dans ServerScriptService lorsqu'ils sont utilisés par des scripts côté serveur et dans ReplicatedStorage lorsqu'ils sont utilisés par des scripts locaux côté client (comme les interactions GUI).

  1. Créez un ModuleScript dans ServerScriptService.

Structure des scripts de module

Lorsqu'un script de module est créé, il commence par le code ci-dessous :

local Module = {}
return Module

La ligne local Module = {} crée une table, ou conteneur de code, où les fonctions et variables partagées du module peuvent être stockées. Cette table doit être renommée en fonction de l'objectif du module, comme RewardManager ou ParticleController. Contrairement aux autres variables qui sont en camel case (myVariable), il est recommandé d'utiliser le pascal case et de commencer par une majuscule pour les tables de module (MyModule).

local RewardManager = {}
return RewardManager

Pour que d'autres scripts puissent utiliser les fonctions ou variables non locales d'un module, chaque module se termine par return MyModule. Chaque fois qu'un autre script essaie d'accéder au code du module, return permet à ce script d'accéder au code 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, tapez le nom de la table du module, suivi d'un point, et du nom de la fonction ou de la variable, comme dans TestModule.myVariable. Utiliser 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)
-- Code d'exemple
end
return TestModule

Portée dans les scripts de module

Pour qu'une fonction ou une variable de module soit utilisée dans un script externe, ne tapez pas local.

Taper local devant des variables et des fonctions signifie qu'elles ne sont utilisables que par ce script. Bien que cela soit une bonne pratique pour la plupart des scripts afin de réduire les erreurs et les problèmes de dépannage, vous ne pouvez pas rendre les fonctions et variables des scripts de module locales.

Tout code utilisé uniquement par ce script de module doit toujours inclure local. Par exemple, le code ci-dessous inclut la variable locale difficultyModifier, qui ne peut être utilisée que dans ce script de module, et la fonction getCoinReward(), qui peut être utilisée dans des scripts en dehors du module.

local RewardManager = {}
-- Utilisable uniquement dans le script de module
local rewardCoins = 50
-- Utilisable uniquement dans le script de 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

Un script de module ne peut pas exécuter de code par lui-même — il doit être chargé dans un autre script en utilisant le mot-clé require(). La fonction require() accepte un argument, l'emplacement du script de module dans l'Explorateur.

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 du module créée dans ce script de module. Pour utiliser les fonctions et variables de cette table, tapez le nom de la variable, suivi d'un point, et du nom exact de ce que vous souhaitez utiliser dans ce script de module, comme MyModule.myFunction(). Lorsque le script s'exécute et atteint cette ligne, il accédera à cette fonction ou variable spécifique stockée dans la table du module.

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

Exemple de RewardManager

ModuleScript - RewardManager
local RewardManager = {}
-- Utilisable uniquement dans le script de module
local rewardCoins = 50
-- Utilisable uniquement dans le script de 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 de module
local RewardManager = require(ServerStorage.RewardManager)
-- Appelle la fonction du script de module
local coins = RewardManager.getCoinReward("easy")
print("Devrait attribuer " .. coins .. " pièces")

Dépannage général

Certaines des astuces ici traitent des problèmes courants lors de l'utilisation de scripts de module. Gardez à l'esprit que les scripts de module peuvent être un sujet compliqué avec plus de nuances. Pour plus de détails, consultez ce guide plus technique sur Module Scripts.

Problème : Obtenez un message d'erreur incluant : "Infinite yield possible" ou "not a valid member".

  • Vérifiez l'orthographe du script de module où il est chargé. require() doit inclure le chemin et l'orthographe exacts du script de module, qui peut être nommé différemment de la table du module.

Problème : Obtenez un message d'erreur incluant : "attempt to index global".

  • Dans tous les scripts utilisant un script de module, assurez-vous qu'il est chargé en utilisant la fonction require(). Sinon, ce script ne peut pas utiliser les fonctions et variables du script de module.

Résumé

Les scripts de module dans Roblox sont une méthode que les codeurs utilisent pour organiser et réutiliser le code. Un script de module est souvent stocké dans ServerStorage (ou ReplicatedStorage pour les interactions basées sur le client). De là, d'autres scripts peuvent appeler des fonctions et des variables stockées dans ce script de module.

Par exemple, un jeu peut attribuer des points aux joueurs pour la collecte d'objets. Un script de module peut gérer le code pour donner des points. Ensuite, les scripts pour différents types d'objets peuvent simplement appeler la fonction du script de module. Cela réduit le besoin de réutiliser du code entre les scripts, rendant le code plus facile à comprendre et à maintenir.

©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.