Wenn Projekte komplex werden, wird es wichtig, nachzudenken, wie Skripte organisiert sind.Gute Organisationspraktiken können sicherstellen, dass Code zwischen Skripten nicht dupliziert wird oder schwer zu verwalten ist.
Ein besserer Weg, um Code zu organisieren und wiederzuverwenden, ist mit Modulskripten , einem einzigartigen Skripttyp, das eine Reihe von Funktionen und Variablen speichert, die dazu bestimmt sind, einen gemeinsamen Zweck zu erfüllen, wie das Verwalten von Spieler- oder Feindengeld.Code innerhalb von Modulskripten kann von anderen Skripten verwendet werden.Auf diese Weise können Sie die gleiche Funktion aufrufen, die Münzen aus mehreren verschiedenen Skripten gibt, wann immer ein Spieler eine Quest beendet oder einen Abholvorgang findet.
Durch das Speichern von häufig verwendetem Code in Modulskripts wird die Wartung und Organisation von Code einfacher, da nur ein Skript, das. PL: die Skriptsaktualisiert werden muss, anstatt mehrere Skripte zu aktualisieren.
Modulskript-Grundlagen
Module-Skripte sind eigentlich ihr eigenes separates Objekt im Vergleich zu Skript-Objekten.In Roblox können Modulskripte mit einem violetten Symbol gekennzeichnet werden.
Erstelle ein Skript, das. PL: die Skripts
ModuleScripts werden gewöhnlich in ServerScriptService platziert, wenn sie von serverseitigen Skripten verwendet werden, und ReplicatedStorage wenn sie von clientseitigen lokalen Skripten (z. B. GUI-Interaktionen) verwendet werden.
- Erstellen Sie ein Modulskript in ServerScriptService .

Struktur von Modulskripten
Wenn ein Modul erstellt wird, beginnt jedes Modulskript mit dem Code unten:
local Module = {}return Module
Die Zeile local Module = {} erstellt eine Tabelle oder einen Container von Codes, in dem die gemeinsamen Funktionen und Variablen des Moduls gespeichert werden können.Diese Tabelle sollte mit dem Zweck des Moduls umbenannt werden, wie z. B. RewardManager oder ParticleController.Im Gegensatz zu anderen Variablen, die Großbuchstaben verwenden ( myVariable ), werden Modultabellen empfohlen, den Pascal-Fall zu verwenden und mit Großbuchstaben zu beginnen ( MyModule ).
local RewardManager = {}return RewardManager
So können andere Skripte die nichtlokalen Funktionen oder Variablen eines Moduls verwenden, jedes Modul endet mit return MyModule.Jedes Mal, wenn ein anderes Skript versucht, Code aus dem Modul zu erhalten, gibt Return diesem Skript den Zugriffscode, der innerhalb des Modultabells gespeichert ist.
Zu Modulskripten hinzufügen
Um eine Funktion oder Variable zum Modul hinzuzufügen, die in einem anderen Skript, das. PL: die Skriptsverwendet werden kann, geben Sie den Namen der Modultabelle ein, gefolgt von einem Punkt und dem Namen der Funktion oder Variable, wie in TestModule.myVariable.Die Verwendung des Dot-Operators ist eine weitere Möglichkeit, Code in eine Tabelle einzufügen, so dass andere Skripte auf diesen Code zugreifen können, wann immer das Modul-Tab zurückgegeben wird.
local TestModule = {}
-- Fügt einer Variable eine Tabelle zu 'TestModule' hinzu
TestModule.myVariable = 100
-- Fügt einer Funktion zum 'TestModule'-Tab hinzu
function TestModule.doTask(player)
-- Codes
end
return TestModule
Scope in Modulskripten
Für eine Modulfunktion oder Variable, die in einem externen Skript, das. PL: die Skriptsverwendet wird, geben Sie nicht ein.
Das Eingeben von local vor Variablen und Funktionen bedeutet, dass sie nur von diesem Skript, das. PL: die Skriptsverwendet werden können.Während dies eine gute Praxis für die meisten Skripte zur Fehlerreduzierung und Problemlösung ist, kannst du die Modulskriptfunktionen und -variablen nicht lokal machen.
Jeder Code, der nur von diesem Modulskript verwendet wird, sollte immer noch local.Zum Instanzenthält der Code unten die lokale Variable difficultyModifier, die nur in diesem Skript, das. PL: die Skriptsverwendet werden kann, und die Funktion getCoinReward(), die außerhalb des Moduls in Skripten verwendet werden kann.
local RewardManager = {}
-- Nur im Skript, das. PL: die Skriptsverwendbar
local rewardCoins = 50
-- Nur im Skript, das. PL: die Skriptsverwendbar
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Verwendbar in anderen Skripten
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Verwende Module in anderen Skripten
Allein kann ein Modulskript keinen Code ausführen - es muss in einem anderen Skript mit dem Schlüsselwort require() geladen werden.Die Funktion require() akzeptiert ein Argument, den Standort des Modulskripts im Explorer.
Um ein Modul zu verwenden, in einem separaten Skript, das. PL: die Skripts, setze eine Variable mit dem gleichen Wert wie require(moduleScript) .
local MyModule = require(ServerStorage.ModuleScript)
Jetzt enthält die Variable MyModule den Modultisch, der in diesem Skript, das. PL: die Skriptserstellt wurde.Um Funktionen und Variablen aus dieser Tabelle zu verwenden, geben Sie den Variablennamen ein, gefolgt von einem Punkt, und den genauen Namen dessen, was in diesem Skript, das. PL: die Skriptsverwendet werden soll, wie MyModule.myFunction().Wenn das Skript ausgeführt und diese Zeile erreicht, wird es auf diese spezifische Funktion oder Variable zugreifen, die im Modul-Tab gespeichert ist.
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
Belohnungsmanager-Beispiel
ModuleScript - Belohnungsmanager
local RewardManager = {}
-- Nur im Skript, das. PL: die Skriptsverwendbar
local rewardCoins = 50
-- Nur im Skript, das. PL: die Skriptsverwendbar
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Verwendbar in anderen Skripten
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Skript - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Skript, das. PL: die Skriptsladenlocal RewardManager = require(ServerStorage.RewardManager)--Ruft Funktion aus Skript, das. PL: die Skriptsauflocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Allgemeine Fehlersuche
Einige der Tipps hier richten sich an allgemeine Probleme beim Arbeiten mit Modulskripten.Denken Sie daran, dass Modulskripte ein kompliziertes Thema mit mehr Nuancen sein können.Für weitere Details siehe diesen technischeren Leitfaden zu Modulskripten. Problem: Holen Sie sich eine Fehlermeldung, die enthält: "Infinite yield possible" oder "not a valid member".
Überprüfen Sie die Rechtschreibung des Modulskripts, wo es geladen wird. require() muss den genauen Pfad und die Schreibweise des Skript, das. PL: die Skriptsenthalten, das möglicherweise einen anderen Namen als der Modultisch hat. Problem: Holen Sie sich eine Fehlermeldung, die enthält: "attempt to index global".
In allen Skripten, die ein Skript, das. PL: die Skriptsverwenden, stellen Sie sicher, dass es mit der Funktion require() geladen wird.Wenn nicht, kann dieses Skript keine Funktionen und Variablen aus dem Skript, das. PL: die Skriptsverwenden.
Übersicht
Modulskripte in Roblox sind eine Methode, die Codierer verwenden, um Codeszu organisieren und wiederzuverwenden.Ein Modulskript wird oft in ServerStorage (oder ReplicatedStorage für clientbasierte Interaktionen) gespeichert.Von dort aus können andere Skripte Funktionen und Variablen aufrufen, die in diesem Skript, das. PL: die Skriptsgespeichert sind.
Zum Instanzkann ein Spiel Spielern Punkte für das Sammeln von Objekten vergeben.Ein Modulskript kann Code bearbeiten, um Punkte zu geben.Dann können Skripte für verschiedene Arten von Objekten einfach die Modulskript-Funktion aufrufen.Dies reduziert die Notwendigkeit, Code zwischen Skripten wiederzuverwenden, wodurch Code leichter zu verstehen und zu warten ist.