Mit zunehmender Komplexität von Projekten wird es wichtig, darüber nachzudenken, wie Skripte organisiert sind. Gute Organisationspraktiken können sicherstellen, dass Code nicht zwischen Skripten dupliziert wird oder schwer zu verwalten ist.
Eine bessere Möglichkeit, Code zu organisieren und wiederzuverwenden, ist mit Modulscripten, einer einzigartigen Art von Skript, das eine Reihe von Funktionen und Variablen speichert, die auf einen gemeinsamen Zweck ausgelegt sind, wie das Verwalten von Spielermunitionen oder Feinden. Code innerhalb von Modulscripten kann von anderen Skripten verwendet werden. So können Sie dieselbe Funktion, die Munition gibt, von mehreren verschiedenen Skripten aus aufrufen, wann immer ein Spieler eine Quest abschließt oder ein Item findet.
Durch das Speichern häufig verwendeten Codes in Modulscripten wird die Pflege und Organisation des Codes einfacher, da Änderungen nur an einem Modulscripten vorgenommen werden müssen, anstatt mehrere Skripte zu aktualisieren.
Grundlagen der Modulscripte
Modulscripte sind tatsächlich eigene separate Objekte im Vergleich zu Skriptobjekten. In Roblox können Modulscripte mit einem lila Symbol gekennzeichnet werden.
Erstellen eines Modulscripts
Modulscripte werden gewöhnlich im ServerScriptService platziert, wenn sie von serverseitigen Skripten verwendet werden, und im ReplicatedStorage, wenn sie von clientseitigen lokalen Skripten (z. B. GUI-Interaktionen) verwendet werden.
- Erstellen Sie ein ModuleScript im ServerScriptService.

Struktur der Modulscripte
Wenn sie erstellt werden, beginnt jedes Modulscript mit dem folgenden Code:
local Module = {}return Module
Die Zeile local Module = {} erstellt eine Tabelle oder einen Container für Code, in der die gemeinsamen Funktionen und Variablen des Moduls gespeichert werden können. Diese Tabelle sollte in Übereinstimmung mit dem Zweck des Moduls umbenannt werden, z. B. in RewardManager oder ParticleController. Im Gegensatz zu anderen Variablen, die CamelCase (myVariable) sind, wird empfohlen, Modultabellen PascalCase zu verwenden und mit einem Großbuchstaben zu beginnen (MyModule).
local RewardManager = {}return RewardManager
Damit andere Skripte die nicht-lokalen Funktionen oder Variablen eines Moduls verwenden können, endet jedes Modul mit return MyModule. Wann immer ein anderes Skript versucht, Code aus dem Modul zu erhalten, erlaubt return diesem Skript den Zugriff auf den im Modultabelle gespeicherten Code.
Hinzufügen zu Modulscripten
Um eine Funktion oder Variable zu dem Modul hinzuzufügen, die in einem anderen Skript verwendet werden kann, geben Sie den Namen der Modultabelle ein, gefolgt von einem Punkt und dem Namen der Funktion oder Variablen, wie in TestModule.myVariable. Der Punktoperator ist eine weitere Möglichkeit, Code in einer Tabelle hinzuzufügen, sodass andere Skripte auf diesen Code zugreifen können, wann immer die Modultabelle zurückgegeben wird.
local TestModule = {}
-- Fügt eine Variable zur 'TestModule'-Tabelle hinzu
TestModule.myVariable = 100
-- Fügt eine Funktion zur 'TestModule'-Tabelle hinzu
function TestModule.doTask(player)
-- Platzhaltercode
end
return TestModule
Gültigkeitsbereich in Modulscripten
Damit eine Modul-Funktion oder -Variable in einem externen Skript verwendet werden kann, darf nicht local eingegeben werden.
Das Schreiben von local vor Variablen und Funktionen bedeutet, dass sie nur von diesem Skript aus verwendbar sind. Während dies eine gute Praxis für die meisten Skripte ist, um Fehler und Probleme zu verringern, können Sie Modulskript-Funktionen und -Variablen nicht lokal machen.
Jeder Code, der nur von diesem Modulscript verwendet wird, sollte weiterhin local enthalten. Zum Beispiel enthält der folgende Code die lokale Variable difficultyModifier, die nur in diesem Modulscripten verwendet werden kann, und die Funktion getCoinReward(), die in Skripten außerhalb des Moduls verwendet werden kann.
local RewardManager = {}
-- Nur im Modulscripten verwendbar
local rewardCoins = 50
-- Nur im Modulscripten verwendbar
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- In anderen Skripten verwendbar
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Verwenden von Modulen in anderen Skripten
An sich kann ein Modulscript keinen Code ausführen — es muss in einem anderen Skript mit dem Schlüsselwort require() geladen werden. Die Funktion require() akzeptiert ein Argument, den Speicherort des Modulscripten im Explorer.
Um ein Modul zu verwenden, setzen Sie in einem separaten Skript eine Variable gleich require(moduleScript).
local MyModule = require(ServerStorage.ModuleScript)
Jetzt enthält die Variable MyModule die Modultabelle, die in diesem Modulscripten erstellt wurde. Um Funktionen und Variablen aus dieser Tabelle zu verwenden, geben Sie den Variablennamen ein, gefolgt von einem Punkt und dem genauen Namen dessen, was in diesem Modulscripten verwendet werden soll, wie MyModule.myFunction(). Wenn das Skript ausgeführt wird und diese Zeile erreicht, wird auf die spezifische Funktion oder Variable zugegriffen, die in der Modultabelle gespeichert ist.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Beispiel für RewardManager
ModuleScript - RewardManager
local RewardManager = {}
-- Nur im Modulscripten verwendbar
local rewardCoins = 50
-- Nur im Modulscripten verwendbar
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- In anderen Skripten verwendbar
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScriptlocal ServerStorage = game:GetService("ServerStorage")-- Modulscript ladenlocal RewardManager = require(ServerStorage.RewardManager)-- Funktion aus dem Modulscripten aufrufenlocal coins = RewardManager.getCoinReward("easy")print("Sollte " .. coins .. " Münzen vergeben")
Allgemeine Fehlersuche
Einige der hier genannten Tipps beziehen sich auf häufige Probleme beim Arbeiten mit Modulscripten. Beachten Sie, dass Modulscripte ein komplexes Thema mit mehr Nuancen sein können. Für weitere Details siehe diesen technischeren Leitfaden zu Modulscripten.
Problem: Erhalten Sie eine Fehlermeldung mit: "Infinite yield possible" oder "not a valid member".
- Überprüfen Sie die Schreibweise des Modulscripten, wo es geladen wird. require() muss den genauen Pfad und die Schreibweise des Modulscripten enthalten, der möglicherweise anders benannt ist als die Modultabelle.
Problem: Erhalten Sie eine Fehlermeldung mit: "attempt to index global".
- Stellen Sie in allen Skripten, die ein Modulscripten verwenden, sicher, dass es mit der Funktion require() geladen wird. Andernfalls kann dieses Skript keine Funktionen und Variablen aus dem Modulscripten verwenden.
Zusammenfassung
Modulscripte in Roblox sind eine Methode, die Entwickler verwenden, um Code zu organisieren und wiederzuverwenden. Ein Modulscripten wird häufig in ServerStorage (oder ReplicatedStorage für clientbasierte Interaktionen) gespeichert. Von dort aus können andere Skripte Funktionen und Variablen aufrufen, die in diesem Modulscripten gespeichert sind.
Zum Beispiel kann eine Erfahrung Punkte an Spieler vergeben, die Objekte sammeln. Ein Modulscripten kann den Code zur Vergabe von Punkten verwalten. Dann können Skripte für verschiedene Arten von Objekten einfach die Funktion des Modulscripten aufrufen. Dies verringert die Notwendigkeit, Code zwischen Skripten wiederzuverwenden, was den Code leichter verständlich und wartbar macht.