Wprowadzenie do skryptów modułowych

*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.

W miarę jak projekty stają się bardziej skomplikowane, ważne staje się myślenie o tym, jak skrypty są zorganizowane. Dobre praktyki organizacyjne mogą zapewnić, że kod nie będzie duplikowany pomiędzy skryptami ani nie stanie się trudny do zarządzania.

Lepszym sposobem organizacji i ponownego użycia kodu są skrypty modułowe, unikalny typ skryptu, który przechowuje zestaw funkcji i zmiennych zaprojektowanych w celu spełnienia wspólnego celu, 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 wywołać tę samą funkcję, która daje monety, z wielu różnych skryptów za każdym razem, gdy gracz kończy misję lub znajduje przedmiot.

Przechowując często używany kod w skryptach modułowych, ułatwia to utrzymanie i organizację kodu, ponieważ zmiany muszą być wprowadzone tylko w jednym skrypcie modułowym, a nie w wielu skryptach.

Podstawy skryptów modułowych

Skrypty modułowe to w rzeczywistości własny oddzielny obiekt w porównaniu do obiektów skryptów. W Robloxie, skrypty modułowe mogą być oznaczane ikoną fioletową.

Utworzenie skryptu modułowego

Skrypty modułowe są powszechnie umieszczane w ServerScriptService, gdy są używane przez skrypty po stronie serwera, oraz w ReplicatedStorage, gdy są używane przez lokalne skrypty po stronie klienta (na przykład interakcje GUI).

  1. Utwórz ModuleScript w ServerScriptService.

Struktura skryptów modułowych

Po utworzeniu każdy skrypt modułowy zaczyna się od poniższego kodu:


local Module = {}
return Module

Linia local Module = {} tworzy tabelę, czyli kontener kodu, w którym mogą być przechowywane wspólne funkcje i zmienne modułu. Tabela ta powinna być zmieniana na cel modułu, na przykład RewardManager lub ParticleController. W przeciwieństwie do innych zmiennych, które są zapisywane w camel case (myVariable), tabele modułowe zaleca się stosować w pascal case i rozpoczynać od wielkiej litery (MyModule).


local RewardManager = {}
return RewardManager

Aby inne skrypty mogły używać nielokalnych funkcji lub zmiennych modułu, każdy moduł kończy się zwracając MyModule. Kiedy inny skrypt próbuje uzyskać kod ze skryptu modułowego, return pozwala temu skryptowi uzyskać dostęp do kodu przechowywanego w tabeli modułowej.

Dodawanie do skryptów modułowych

Aby dodać funkcję lub zmienną do modułu, która może być używana w innym skrypcie, wpisz nazwę tabeli modułu, następnie kropkę, a następnie nazwę funkcji lub zmiennej, jak w TestModule.myVariable. Użycie operatora kropki to kolejny sposób dodawania kodu do tabeli, co pozwala innym skryptom uzyskać dostęp do tego kodu za każdym razem, gdy tabela modułowa jest zwracana.


local TestModule = {}
-- Dodaje zmienną do tabeli 'TestModule'
TestModule.myVariable = 100
-- Dodaje funkcję do tabeli 'TestModule'
function TestModule.doTask(player)
-- Kod zastępczy
end
return TestModule

Zakres w skryptach modułowych

Aby funkcja lub zmienna modułu mogła być używana w zewnętrznym skrypcie, nie należy wpisywać local.

Wpisanie local przed zmiennymi i funkcjami oznacza, że są one tylko użyteczne dla tego skryptu. Choć jest to dobra praktyka w większości skryptów, aby zredukować błędy i ułatwić rozwiązywanie problemów, nie można uczynić funkcji i zmiennych skryptu modułowego lokalnymi.

Jakikolwiek kod używany tylko przez ten skrypt modułowy powinien zatem nadal zawierać local. Na przykład, poniższy kod zawiera lokalną zmienną difficultyModifier, która może być używana tylko w tym skrypcie modułowym, oraz funkcję getCoinReward(), która może być używana w skryptach poza modułem.


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

Używanie modułów w innych skryptach

Sam skrypt modułowy nie może uruchomić kodu — musi być załadowany w innym skrypcie za pomocą słowa kluczowego require(). Funkcja require() przyjmuje jeden argument, lokalizację skryptu modułowego w Eksploratorze.

Aby użyć modułu, w oddzielnym skrypcie przypisz zmiennej wartość require(moduleScript).


local MyModule = require(ServerStorage.ModuleScript)

Teraz zmienna MyModule zawiera tabelę modułu utworzoną w tym skrypcie modułowym. Aby używać funkcji i zmiennych z tej tabeli, wpisz nazwę zmiennej, następnie kropkę, a następnie dokładną nazwę tego, co chcesz użyć w tym skrypcie modułowym, jak MyModule.myFunction(). Gdy skrypt się uruchomi i dotrze do tej linii, uzyska dostęp do tej konkretnej funkcji lub zmiennej przechowywanej w tabeli modułowej.


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

Przykład RewardManager

ModuleScript - RewardManager

local RewardManager = {}
-- Użyteczne tylko w skrypcie modułowym
local rewardCoins = 50
-- Użyteczne tylko w skrypcie modułowym
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Użyteczne w innych skryptach
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript

local ServerStorage = game:GetService("ServerStorage")
-- Ładowanie skryptu modułowego
local RewardManager = require(ServerStorage.RewardManager)
--Wywołuje funkcję ze skryptu modułowego
local coins = RewardManager.getCoinReward("easy")
print("Należy przyznać " .. coins .. " monet")

Ogólne rozwiązywanie problemów

Niektóre z tych wskazówek dotyczą powszechnych problemów związanych z pracą ze skryptami modułowymi. Pamiętaj, że skrypty modułowe mogą być skomplikowanym tematem z większą niuansą. Aby uzyskać więcej szczegółów, zobacz ten bardziej techniczny przewodnik o Skryptach Modułowych.

Problem: Otrzymujesz wiadomość o błędzie zawierającą: "Możliwe nieskończone oczekiwanie" lub "nie jest prawidłowym członem".

  • Sprawdź pisownię skryptu modułowego, z którego jest załadowany. require() musi zawierać dokładną ścieżkę i pisownię skryptu modułowego, który może być nazwany inaczej niż tabela modułu.

Problem: Otrzymujesz wiadomość o błędzie zawierającą: "próba indeksowania globalnego".

  • W jakichkolwiek skryptach korzystających ze skryptu modułowego, upewnij się, że jest on załadowany za pomocą funkcji require(). Jeśli nie, ten skrypt nie może używać funkcji i zmiennych ze skryptu modułowego.

Podsumowanie

Skrypty modułowe w Robloxie to metoda, której programiści używają do organizacji i ponownego użycia kodu. Skrypt modułowy jest często przechowywany w ServerStorage (lub w ReplicatedStorage dla interakcji po stronie klienta). Z tego miejsca inne skrypty mogą wywoływać funkcje i zmienne przechowywane w tym skrypcie modułowym.

Na przykład, jedno doświadczenie może przyznawać punkty graczom za zbieranie obiektów. Skrypt modułowy może obsługiwać kod przyznający punkty. Wtedy skrypty dla różnych typów obiektów mogą po prostu wywoływać funkcję skryptu modułowego. To zmniejsza potrzebę ponownego używania kodu między skryptami, czyniąc kod łatwiejszym do zrozumienia i utrzymania.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.