Мир Roblox состоит из объектов Instance, собранных в дерево. У каждого объекта есть свойства, методы и события. Понимание этой модели помогает связать части игры без постоянных циклов и скрытых зависимостей.
Дерево объектов Roblox и Instance
В верхней части дерева находится game. Его сервисы отвечают за разные области платформы: игроки, освещение, общее хранилище, звук и другие системы.
game
├── Workspace
│ └── Map
├── Players
├── ReplicatedStorage
└── ServerScriptService
Родитель определяет место объекта в иерархии. Путь workspace.Map означает, что Map — дочерний объект Workspace.
Свойства и методы объектов Roblox
Свойство хранит состояние объекта, а метод выполняет действие. Например, у детали есть свойства Position и Color, а метод Destroy удаляет экземпляр.
local part = workspace:WaitForChild("StartPad")
part.Transparency = 0.25
part:SetAttribute("Enabled", true)
Двоеточие перед методом автоматически передаёт сам объект как первый аргумент. Поэтому part:Destroy() — стандартная форма вызова метода экземпляра.
Как работают события Roblox
Событие сообщает, что что-то уже произошло. Обработчик подключается через Connect и вызывается только при появлении сигнала.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name, "присоединился")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Такой подход обычно эффективнее цикла, который постоянно проверяет количество игроков.
Данные и аргументы событий Roblox
Событие может передавать аргументы. Touched, например, передаёт деталь, которая коснулась объекта.
local pad = workspace:WaitForChild("StartPad")
pad.Touched:Connect(function(otherPart)
local character = otherPart.Parent
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if humanoid then
print("Персонаж наступил на панель")
end
end)
Событие может сработать несколько раз, поэтому обработчику часто требуется задержка, проверка состояния или явное отключение соединения.
Как связать системы Roblox между собой
Внутри одной стороны выполнения модули помогают разделить ответственность. Для общения между сервером и клиентом Roblox предоставляет удалённые события и функции.
| Инструмент | Когда подходит |
|---|---|
| Обычное событие объекта | Реакция на изменение или действие экземпляра |
BindableEvent | Сигнал между системами на одной стороне |
RemoteEvent | Одностороннее сообщение между клиентом и сервером |
ModuleScript | Общие функции и явные зависимости |
Простая архитектура игры в Roblox
Пусть один модуль отвечает за состояние раунда, серверный скрипт меняет это состояние, а клиентский интерфейс только показывает полученное значение. Тогда у каждой части есть одна роль, а поток данных остаётся понятным.
Начните с дерева объектов и встроенных событий. Когда связей станет больше, группируйте их по системам и документируйте, кто создаёт данные, кто их изменяет и кто только отображает.