Wprowadzenie do modułowych skryptów

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Gdy projekty stają się złożone, staje się ważne, jak skrypcity są zorganizowane. Dobrych praktyk organizacyjnych można upewnić się, że kod nie jest duplikowany między skryptami lub staje się trudny do zarządzać.

Lepszym sposobem na zorganizowanie i ponowne wykorzystanie kodu jest używanie skryptów modułowych , unikalnego typu skryptu, który przechowuje zestaw funkcji i zmienne zaprojektowanych na spełnienie celu wspólnego, takiego jak zarządzanie pieniędzmi gracza lub wrogami. Kod w skryptach modułowych może być używany przez inne skrypty. W ten sposób możesz weзваć tę

Przechowywanie często używanych kodów w skryptach modułowych ułatwia utrzymanie i zorganizowanie kodu, ponieważ zmiany dotyczą tylko jednego modułowego skryptu, a nie aktualizację wielu skryptów.

Podstawy wdrożenia modułu

Skrypt modułowe są właściwie ich własnym osobnym obiektem w porównaniu z obiektami skryptu. W Roblox skrypt modułowe można oznaczyć fioletowym ikona.

Tworzenie modułowego skryptu

ModuleScripts są powszechnie umieszczane w ServerScriptService gdy są używane przez skrypcty stron serwera i ReplicatedStorage gdy są używane przez lokalne skrypcty klientów (takie jak interakcje GUI).

  1. Utwórz ModuleScript w ServerStorage.

구조 modułowych skryptów

Podczas tworzenia każdy modułowy skrypt zaczyna się od kodu poniżej:


local Module = {}
return Module

Linia local Module = {} tworzy tabelę lub kontener kodu, w którym funkcje i zmienne modułu mogą być przechowywane. Ta tabela powinna być zmieniona na celu modułu, tak jak RewardManager lub ParticleController. W przeciwieństwie do innych


local RewardManager = {}
return RewardManager

Tak, inne skrypty mogą używać nielokalnych funkcji lub zmienne modułu, każdy moduł kończy się z powrotem MyModule . Każdy inny skrypt, który próbuje uzyskać kod z modułu, powrót pozwala ten skrypt uzyskać dostęp do kodu zapisu w tabeli modułu.

Dodawanie do modułowych skryptów

Aby dodać funkcję lub zmienne do modułu, który może być używany w innym skrypcie, wpisz nazwę modułu i następnie kropkę, a następnie nazwę funkcji lub zmienne, jak w TestModule.myVariable. Używając operatora kropki jest innym sposobem na dodanie kodu do tabeli, umożliwiając innym skryptom dostęp do tego kodu, gdy modułowa tabela jest zwracana.


local TestModule = {}
-- Dodaje zmiennej do tabeli "TestModule"
TestModule.myVariable = 100
-- Dodaje funkcję do tabeli 'TestModule'
function TestModule.doTask(player)
-- kodplaceholder
end
return TestModule

Zakres w modułach skryptów

Dla funkcji modułu lub zmiennej do użycia w zewnętrznym skrypcie, nie wpisujesz local .

Wpisywanie local przed zmienne i funkcje oznacza, że są one tylko dostępne dla tego skryptu. Chociaż jest to dobra praktyka dla większości skryptów do zmniejszania błędów i rozwiązywania problemów, nie możesz uczynić lokalnych funkcji skryptów i zmienne.

Każdy używany kod tylko przez ten moduł skryptu powinien nadal zawierać local . Na instancjakod poniżej zawiera lokalną zmienne difficultyModifier, która może być używana tylko w tym module script, i funkcję 1> GCoinReward()1>, która może być używana w skryptach poza module.


local RewardManager = {}
-- Używany tylko w skrypcie modułu
local rewardCoins = 50
-- Używany tylko w skrypcie modułu
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Można używać w innych skryptach
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager

Używanie modułów w innych skryptach

Sama w sobie, skrypt modułu nie może wykonać kodu — musi być załadowany w innym skrypcie używającym słowa kluczowego require(). Funkcja require() akceptuje jeden argument, lokalizację modułu skryptu w Explorer.

Aby użyć modułu, w osobnym skrypcie ustaw zmienną równą require(moduleScript) .


local MyModule = require(ServerStorage.ModuleScript)

Teraz zmienne MyModule zawiera tabelę modułu stworzoną w tym module script. Aby użyć funkcji i zmienne z tej tabeli, wpisz nazwę zmienne, następnie punkt i dokładną nazwę tego module script, jak MyModule.myFunction() . Gdy skrypt będzie się uruchomić i dotrze do tej linii, będzie on uzyskiwał dostęp do tej specyficznej fun


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

RewardManager przykład

ModuleScript - Menedżer Nagród

local RewardManager = {}
-- Używany tylko w skrypcie modułu
local rewardCoins = 50
-- Używany tylko w skrypcie modułu
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Można używać w innych skryptach
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Skrypt - TreasureChestScript

local ServerStorage = game:GetService("ServerStorage")
-- Załaduj modułowy skrypt
local RewardManager = require(ServerStorage.RewardManager)
--Wezwanie funkcji z modułu skryptu
local coins = RewardManager.getCoinReward("easy")
print("Should award " .. coins .. " coins")

Generał Troubleshooting

Niektóre z wskazówek tutaj dotyczą problemów powszechnych podczas pracy z modułowymi skryptami. Pamiętaj, że modułowe skrypty mogą być skomplikowanym tematem z większą ilością nuansów. Dla więcej szczegółów, zobacz ten bardziej techniczny przewodnik na temat Module Scripts . Problem: Otrzymaj wiadomość błędu zawierającą: "Infinite yield possible" lub «nie avaliaj członek.

  • Sprawdź poprawność wszystkich znaków w module script, gdzie jest ona ładowana. require() musi zawierać dokładną ścieżkę i wszystkie znaki modułu, które mogą być nazwane inaczej niż tabela modułu. Problem: Otrzymaj wiadomość błędu zawierającą: "attempt to index global" .

  • W dowolnych skryptach używających modułowego skryptu, upewnij się, że zostanie on załadowany za pomocą funkcji require(). Jeśli nie, ten skrypt nie może używać funkcji i zmienne z modułu skryptu.

Podsumowanie

Skripty modułu w Roblox są metodą, którą kodenci używają, aby zorganizować i ponownie użyć kodu. Skrypt modułu jest często przechowywany w ServerStorage (lub ReplicatedStorage dla interakcji bazowych). Od tamtych, inne skrypty mogą wywołać funkcje i zmienne przechowywane w tym modułowym skrypcie.

Na instancjajedna gra może przyznać punkty graczom za zbieranie obiektów. Modułowy skrypt może obsługiwać kod, aby dać punkty. Następnie, skrypty dla różnych rodzajów obiektów mogą po prostu wezwywać funkcję modułu. To zmniejsza potrzebę ponownego używania kodu między skryptami, co ułatwia zrozumienie i utrzymanie kodu.