ROBLOX

Где размещать Script, LocalScriptи ModuleScript в Roblox

Полный разбор иерархии Roblox Studio: где размещать Script, LocalScript и ModuleScript и чем отличаются серверные и клиентские скрипты.

7 мин чтения
Дерево Workspace с объектами Script, LocalScript и ModuleScript
В этой статье

Тип скрипта определяет, где выполняется код и к каким данным он имеет доступ. Правильное размещение помогает избежать ситуации, когда код выглядит корректно, но не запускается.

Чем отличаются Script, LocalScript и ModuleScript

ТипГде выполняетсяТипичные задачи
ScriptНа сервереПравила раунда, награды, общая игровая логика
LocalScriptНа клиенте игрокаИнтерфейс, камера, локальный ввод и эффекты
ModuleScriptТам, где его вызвалиПереиспользуемые функции, конфигурации и классы

Сервер должен оставаться источником истины для важных игровых данных. Клиент отвечает за персональное представление и ввод, но его данные нельзя принимать без проверки.

Где размещать Script в Roblox

Серверные скрипты обычно хранят в ServerScriptService. Объекты из этого контейнера не передаются клиентам, поэтому здесь удобно держать логику раундов, выдачу предметов и проверку запросов.

Script также может работать внутри некоторых объектов мира, но централизованное размещение упрощает навигацию по проекту.

Lua
-- ServerScriptService/Round.server.lua
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local roundState = ReplicatedStorage:WaitForChild("RoundState")

roundState.Value = "Preparing"

Где размещать LocalScript в Roblox

LocalScript запускается только в поддерживаемых клиентских контейнерах. Чаще всего это:

  • StarterPlayerScripts для общей клиентской логики;
  • StarterCharacterScripts для поведения персонажа;
  • StarterGui для интерфейса;
  • StarterPack для инструментов игрока.

LocalScript для интерфейса и ввода

Кнопка интерфейса должна обрабатываться на клиенте, потому что каждый игрок видит собственный экземпляр GUI.

Lua
-- StarterGui/Shop/BuyButton/Handler.client.lua
local button = script.Parent

button.Activated:Connect(function()
    print("Кнопка нажата")
end)

Если после нажатия требуется изменить важные серверные данные, клиент отправляет запрос, а сервер самостоятельно проверяет условия операции.

Где размещать и как использовать ModuleScript

Модуль возвращает значение через return. Чаще всего это таблица с функциями или конфигурацией.

Lua
local NumberUtils = {}

function NumberUtils.round(value)
    return math.floor(value + 0.5)
end

return NumberUtils

Модули, нужные и серверу, и клиенту, можно хранить в ReplicatedStorage. Серверные модули с закрытой логикой лучше оставить в ServerScriptService или ServerStorage.

Как выбрать тип скрипта Roblox

  1. Логика влияет на всех игроков или на важные данные — используйте Script.
  2. Поведение относится к интерфейсу, камере или локальному вводу — используйте LocalScript.
  3. Код нужен в нескольких местах — вынесите его в ModuleScript.
  4. Если сервер принимает данные клиента — всегда проверяйте их на сервере.

Такое разделение делает проект предсказуемее и создаёт основу для безопасной архитектуры.

Наверх