Wenn Projekte komplex werden, wird es wichtig, wie Skripte organisiert sind. Gute Organisationspraktiken können dafür sorgen, dass der Code nicht zwischen Skripten dupliziert wird, oder wird schwer zu verwalten.
Ein besserer Weg, um Code zu organisieren und wiederzuverwenden, ist mit Modul-Skripts , eine einzigartige Art von Skript, die ein Set von Funktionen und Variablen speichert, die für einen gemeinsamen Zweck entwickelt wurden, wie das Verwalten von Spielergeld oder Feinden. Code innerhalb von Modul-Skripts kann von anderen Skripts verwendet werden. Auf diese Weise können Sie die gleiche Funktion aufrufen, die Münzen aus mehreren verschiedenen Skripts gibt, wenn ein Spieler eine Quest absch
Durch das Speichern von häufig verwendeten Code in Modul-Skripts macht das Warten und Organisieren von Code einfacher, da nur Änderungen an einem Skript, das. PL: die Skriptsvorgenommen werden müssen, nicht an mehreren Skripts.
Modul-Script-Basis
Modul-Skripte sind eigentlich ihr eigenes separates Objekt im Vergleich zu Skript-Objekten. In Roblox können Modul-Skripte mit einem violett -Symbol angezeigt werden.
Modul-Script erstellen
ModuleScripts werden in der Regel in ServerScriptService platziert, wenn sie von serverseitigen Skripts verwendet werden, und in ReplicatedStorage platziert, wenn sie von clientseitigen lokalen Skripts verwendet werden (z. B. GUI-Interaktionen).
- Erstellen Sie ein ModuleScript in ServerStorage .
Struktur von Modul-Skripts
Wenn erstellt, beginnt jedes Modul-Skript mit dem Code unten:
local Module = {}return Module
Die Zeile local Module = {} erstellt eine Tabelle, oder Container of Codes, in der die Module's shared functions und Variablen aufbewahrt werden können. Diese Tabelle sollte in den Zweck des Moduls umbenannt werden, wie z. B. RewardManager oder ParticleController. Im Gegensatz zu anderen Vari
local RewardManager = {}return RewardManager
So können andere Skripte die nicht lokalen Funktionen oder Variablen eines Moduls verwenden, jedes Modul endet mit der Rückgabe MyModule. Wenn ein anderes Skript versucht, Code aus dem Modul zu erhalten, gibt die Rückgabe dem Skript Zugriff auf den Code, der in der Modultabelle gespeichert ist.
Module-Skripte hinzufügen
Um eine Funktion oder Variable im Modul, die in einem anderen Skript, das. PL: die Skriptsverwendet werden kann, hinzuzufügen, geben Sie den Namen des Modultables und folgen Sie einem Punkt und den Namen der Funktion oder Variable, wie in TestModule.myVariable . Wenn Sie den Punkt-Betreiber verwenden, ist es ein weiterer Weg, Code in eine Tabelle einzufügen, so dass andere Skripte auf diesen Code jederzeit zugreifen können.
local TestModule = {}
-- Fügt der Tabelle 'TestModule' eine Variable hinzu
TestModule.myVariable = 100
-- Fügt der 'TestModule'-Tabelle eine Funktion hinzu
function TestModule.doTask(player)
-- Codes
end
return TestModule
Scope in Modul-Skripts
Für eine Modulfunktion oder Variable, die in einem außen Skript, das. PL: die Skriptsverwendet wird, nicht type local .
Das Schreiben von local vor Variablen und Funktionen bedeutet, dass sie nur von diesem Skript, das. PL: die Skriptsverwendet werden. Während dies eine gute Praktikum für die meisten Skripte zum Reduzieren von Fehlern und Fehler ist, können Sie nicht lokale Modul-Skript-Funktionen und Variablen erstellen.
Jeder Code, der nur von diesem Modul-Skript verwendet wird, sollte immer noch local enthalten. Zum Instanzenthält der folgende Code die lokale Variable difficultyModifier, die nur in diesem Skript, das. PL: die Skriptsverwendet werden kann, und die Funktion 1> GCoinReward()1>, die in Skripts außerhalb des Moduls verwendet werden kann.
local RewardManager = {}
-- Nur in Skript, das. PL: die Skriptsverwendbar
local rewardCoins = 50
-- Nur in Skript, das. PL: die Skriptsverwendbar
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- In anderen Skripts verwendbar
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Verwendung von Modulen in anderen Skripts
Mit selbst, einem Modul-Skript, kann kein Code ausgeführt werden — es muss in einem anderen Skript mit dem Schlüsselwort require() geladen werden. Die Funktion require() akzeptiert ein Argument, den Standort des Modul-Skripts im Explorer.
Um ein Modul zu verwenden, in einem separaten Skript, das. PL: die Skripts, setzen Sie eine Variable, die gleich ist mit require(moduleScript) .
local MyModule = require(ServerStorage.ModuleScript)
Jetzt enthält die Variable MyModule die Modul-Tabelle, die in diesem Skript, das. PL: die Skriptserstellt wurde. Um Funktionen und Variablen aus dieser Tabelle zu verwenden, geben Sie den Namen der Variable und folgen Sie einem Punkt, und der genaue Name, was in diesem Skript, das. PL: die Skriptsverwendet werden soll, wie z. B. MyModule.myFunction() . Wenn der Skript ausgeführt wird und auf diese Linie zugreift, wird auf diese spezifische F
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
BelohnungsManager-Beispiel
ModuleScript - BelohnungsManager
local RewardManager = {}
-- Nur in Skript, das. PL: die Skriptsverwendbar
local rewardCoins = 50
-- Nur in Skript, das. PL: die Skriptsverwendbar
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- In anderen Skripts verwendbar
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - Schatztruhen-Skript
local ServerStorage = game:GetService("ServerStorage")-- Skript, das. PL: die Skriptsdes Moduls ladenlocal RewardManager = require(ServerStorage.RewardManager)--Ruft Funktion aus Skript, das. PL: die Skriptsauflocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Allgemeines Troubleshooting
Einige der Tipps hier beziehen sich auf häufige Probleme bei der Arbeit mit Modul-Skripts. Denken Sie daran, dass Modul-Skripte ein komplexes Thema mit mehr Nuance sein können. Weitere Informationen finden Sie in diesem mehr technischen Leitfaden über Modul-Skripte . Problem: Holen Sie sich eine Fehler-Nachricht, einschließlich: "Infinite yield possible" oder "not a valid member".
Überprüfen Sie die Rechtschreibung des Modulskripts, in dem es geladen wird. require() muss den genauen Pfad und die Rechtschreibung des Skript, das. PL: die Skriptsenthalten, der möglicherweise anders als die Modul-Tabelle benannt ist. Problem:: Erhalte eine Fehler-Nachricht, einschließlich: "attempt to index global" .
In jedem Skript, das ein Skript, das. PL: die Skriptsverwendet, stellen Sie sicher, dass es mit der Funktion require() geladen ist. Wenn nicht, kann dieses Skript keine Funktionen und Variablen aus dem Skript, das. PL: die Skriptsverwenden.
Zusammenfassung
Modul-Skripte in Roblox sind ein Method, das Coders verwenden, um Codeszu organisieren und wiederzuverwenden. Ein Modul-Skript wird oft in ServerStorage (oder ReplicatedStorage für Client-basierte Interaktionen) gespeichert. Von dort aus können andere Skripte Funktionen und Variablen, die in diesem Skript, das. PL: die Skriptsgespeichert sind, aufrufen.
Zum Instanzkann ein Spiel Spieler für das Sammeln von Objekten belohnen. Ein Modul-Skript kann Code verarbeiten, um Punkte zu geben. Dann können Skripte für verschiedene Arten von Objekten einfach das Modul-Skript aufrufen. Dies reduziert die Notwendigkeit, Code zwischen Skripts wiederzuverwenden, so dass der Code einfacher zu verstehen und zu warten ist.