Найти в Дзене
Roblox Мастерская

Гайд по созданию событий BindableEvent, BindableFunction, RemoteEvent, RemoteFunction в Roblox Studio

Оглавление

Создание связанных событий (BindableEvent)

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

Схематично это выглядит так:

Script 1 → Script 2

или

LocalScript 1 → LocalScript 2

Для создания связанных событий:

1. Добавляем «BindableEvent» к ServerScriptService (если обмениваемся событиями между Script) или ReplicatedStorage (если обмениваемся событиями между LocalScript).

2. В одном скрипте указываем условие для возникновения события и отправляем событие в другой скрипт с помощью команды «BindableEvent:Fire()».

3. В другом скрипте принимаем событие и указываем действия при выполнении события с помощью функции «BindableEvent.Event:Connect(function()».

Пример

Событие для создания парта в игре с помощью двух серверных скриптов (Script).

В первом скрипте отправляем событие через 10 секунд после запуска игры:

local BindableEvent = game.ServerScriptService:WaitForChild("Event")
wait(10)
BindableEvent:Fire()

Во втором скрипте принимаем событие из первого скрипта и создаем новый парт:

local BindableEvent = game.ServerScriptService:WaitForChild("Event")
BindableEvent.Event:Connect(function()
local part = Instance.new("Part")
part.Parent = workspace
part.Position = Vector3.new(0, 1, 0)
part.Name = "Новый парт"
end)

Создание связанных функций (BindableFunction)

Связанные функции (BindableFunction) позволяют создавать свои события в игре и обмениваться этими событиями между скриптами одного вида. Отправка событий происходит в двухстороннем порядке с установлением обратной связи между скриптами, т.е. один скрипт отправляет запрос с событием и ждет выполнение этого события от другого скрипта.

Схематично это выглядит так:

Script 1 → Script 2 → Script 1

или

LocalScript 1 → LocalScript 2 → LocalScript 1

Для создания связанных функций:

1. Добавляем «BindableFunction» к ServerScriptService (если обмениваемся событиями между Script) или ReplicatedStorage (если обмениваемся событиями между LocalScript).

2. В одном скрипте отправляем запрос с помощью команды «BindableFunction:Invoke()»

(можно поместить эту команду в переменную, например: «local invokeEvent = BindableFunction:Invoke()»).

3. В другом скрипте принимаем запрос, выполняем нужные действия и посылаем ответ с помощью функции «BindableFunction.OnInvoke = function()». В конце функции указываем «return» для возврата значений.

Пример

Событие для создания парта в игре с помощью двух серверных скриптов (Script) и отправкой информации о созданном парте.

В первом скрипте отправляем запрос через 10 секунд после запуска игры и выводим название парта после его создания во втором скрипте:

local BindableFunction = game.ServerScriptService:WaitForChild("Function")
wait(10)
local invokePart = BindableFunction:Invoke()
print(invokePart.Name)

Во втором скрипте принимаем запрос из первого скрипта, создаем новый парт и отправляем информацию о созданном парте в первый скрипт:

local BindableFunction = game.ServerScriptService:WaitForChild("Function")
BindableFunction.OnInvoke = function()
local part = Instance.new("Part")
part.Parent = workspace
part.Name = "Новый парт"
part.Position = Vector3.new(0, 1, 0)
return part
end

Создание удаленных событий (RemoteEvent)

Удаленные события (RemoteEvent) позволяют создавать свои события в игре и обмениваться этими событиями между скриптами разного вида. Отправка событий происходит в одностороннем порядке без обратной связи между скриптами, т.е. один скрипт отправляет событие и не ждет выполнения этого события от другого скрипта.

Схематично это выглядит так:

Script → LocalScript

или

LocalScript → Script

Для создания удаленных событий и их отправки из LocalScript в Script (от игрока на сервер):

1. К ReplicatedStorage или Tool (для ручных предметов) добавляем «RemoteEvent».

2. В LocalScript указываем условие для возникновения события и отправляем событие на сервер с помощью команды «RemoteEvent:FireServer()».

3. В Script принимаем событие на сервере и указываем действия при выполнении события с помощью функции «RemoteEvent.OnServerEvent:Connect(function(player)».

Пример

Событие для создания парта в игре с помощью локального скрипта (отправляет событие) и серверного скрипта (принимает событие).

В локальном скрипте (LocalScript) отправляем событие через 10 секунд после запуска игры:

local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent" )
wait(10)
RemoteEvent:FireServer()

В серверном скрипте (Script) принимаем событие из локального скрипта и создаем новый парт:

local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent" )
RemoteEvent.OnServerEvent:Connect(function(player)
print(player.Name .. " отправил событие")
local part = Instance.new("Part")
part.Parent = workspace
part.Position = Vector3.new(0, 1, 0)
part.Name = "Новый парт"
end)

Для создания удаленных событий и их отправки из Script в LocalScript (от сервера к игроку):

1. К ReplicatedStorage или Tool (для ручных предметов) добавляем «RemoteEvent».

2. В Script указываем условие для возникновения события и отправляем событие игрокам с помощью команды «RemoteEvent:FireClient(player)» (для одного игрока) или «RemoteEvent:FireAllClients()» (для всех игроков).

3. В LocalScript принимаем событие с сервера и указываем действия при выполнении события с помощью функции «RemoteEvent.OnClientEvent:Connect(function()».

Пример

Событие для создания парта в игре с помощью серверного скрипта (отправляет событие) и локального скрипта (принимает событие).

В серверном скрипте (Script) отправляем событие для всех игроков через 10 секунд после запуска игры:

local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent")
wait(10)
RemoteEvent:FireAllClients()

В локальном скрипте (LocalScript) принимаем событие из серверного скрипта и создаем новый парт:

local RemoteEvent = game.ReplicatedStorage:WaitForChild("RemoteEvent")
RemoteEvent.OnClientEvent:Connect(function()
local part = Instance.new("Part")
part.Parent = workspace
part.Position = Vector3.new(0, 1, 0)
part.Name = "Новый парт"
end)

Создание удаленных функций (RemoteFunction)

Удаленные функции (RemoteFunction) позволяют создавать свои события в игре и обмениваться этими событиями между скриптами разного вида. Отправка событий происходит в двухстороннем порядке с установлением обратной связи между скриптами, т.е. один скрипт отправляет запрос с событием и ждет выполнение этого события от другого скрипта.

Схематично это выглядит так:

LocalScript → Script → LocalScript

или

Script → LocalScript → Script (такой вариант не рекомендуется использовать!)

Для создания удаленных функций и установления связи LocalScript-Script-LocalScript (от игрока на сервер и обратно):

1. К ReplicatedStorage или Tool (для ручных предметов) добавляем «RemoteFunction».

2. В LocalScript отправляем запрос на сервер с помощью команды «RemoteFunction:InvokeServer()»

(можно поместить эту команду в переменную, например: «local invokeEvent = RemoteFunction:InvokeServer()»).

3. В Script принимаем запрос на сервере, выполняем нужные действия и посылаем ответ игроку с помощью функции «RemoteFunction.OnServerInvoke = function(player)». В конце функции указываем «return» для возврата значений.

Пример

Событие для создания парта в игре и обратной отправкой информации о созданном парте с помощью локального скрипта (отправляет запрос на событие) и серверного скрипта (принимает запрос и отправляет ответ).

В локальном скрипте (LocalScript) отправляем запрос через 10 секунд после запуска игры и выводим название парта после его создания в серверном скрипте:

local RemoteFunction = game.ReplicatedStorage:WaitForChild("RemoteFunction")
wait(10)
local invokePart = RemoteFunction:InvokeServer()
print(invokePart.Name)

В серверном скрипте (Script) принимаем запрос из локального скрипта, создаем новый парт и отправляем информацию о созданном парте в локальный скрипт:

local RemoteFunction = game.ReplicatedStorage:WaitForChild("RemoteFunction")
RemoteFunction.OnServerInvoke = function(player)
print(player.Name .. " отправил запрос")
local part = Instance.new("Part")
part.Parent = workspace
part.Name = "Новый парт"
part.Position = Vector3.new(0, 1, 0)
return part
end