Блог школы Роблоппа — Роблокс Студио, обучение, познавательные статьи и новости школы

:Once() в Роблокс Студио: что это за функция и когда она нужна

Документация
Метод :Once() — это способ подключиться к событию так, чтобы обработчик сработал только один раз, после чего автоматически отключится.
Это удобно, когда вам нужно выполнить действие единожды: запустить кат-сцену, выдать награду, среагировать на первое касание предмета и т.д.
Connection = Event:Once(Function)
После первого вызова события соединение отключается и больше никогда не запускается.

Когда использовать :Once()

Используйте :Once(), когда:
  • событие должно срабатывать один раз за всю игру;
  • важно избежать повторных вызовов, которые могут вызвать баги;
  • нельзя допустить, чтобы игрок случайно активировал действие дважды;
  • нужно предотвратить «двойные нажатия», «двойные покупки», «двойные телепорты»;
  • вы не хотите вручную отключать соединение.

Сравнение :Connect() и :Once()

Метод
Поведение
Когда подходит
:Connect()
Срабатывает каждый раз при вызове события
Кнопки, обновления интерфейса, повторяющиеся действия
:Once()
Срабатывает только один раз, затем отключается
Одноразовые события, вступления, кат-сцены, единоразовые награды

Примеры

1. Одноразовое касание объекта

local part = script.Parent

part.Touched:Once(function(hit)
print("Игрок коснулся объекта впервые!")
end)
После первого касания код выполнится, и обработчик исчезнет.

2. Кат-сцена или вступительное сообщение

local Players = game:GetService("Players")

Players.PlayerAdded:Once(function(player)
print("Первый игрок зашёл в игру! Запускаем кат-сцену.")
end)
Кат-сцена запустится только для самого первого игрока.

3. Одноразовая выдача награды

local proximityPrompt = script.Parent.ProximityPrompt

proximityPrompt.Triggered:Once(function(player)
player.leaderstats.Coins.Value += 100
print("Награда выдана!")
end)
Игрок получит бонус только один раз, даже если снова активирует Prompt.

4. Одноразовый RemoteEvent

local event = game.ReplicatedStorage.StartMission

event.OnServerEvent:Once(function(player)
print(player.Name .. " начал миссию.")
end)
Срабатывает при первом вызове RemoteEvent.

Типичные ошибки

❌ Ошибка 1. Ожидание повторного запуска

Once() не запускается дважды. Если вы планируете повтор — используйте :Connect().

❌ Ошибка 2. Попытка отключить соединение вручную

Соединение после срабатывания уже отключено.

❌ Ошибка 3. Размещение :Once() внутри циклов

Это может создавать много одноразовых обработчиков, что приводит к путанице.

Что происходит под капотом

  • Создаётся временное соединение с событием.
  • После первого вызова Roblox сам вызывает Disconnect() для него.
  • Соединение невозможно повторно активировать.
Это делает :Once() самым безопасным способом создать одноразовый обработчик.

Заключение

Метод :Once() — отличный инструмент для создания одноразовых игровый событий в Роблокс Студио. Он помогает:
  • избежать повторных вызовов;
  • упрощает код;
  • уменьшает количество активных соединений;
  • делает поведение объекта более предсказуемым.
Используйте :Once() в ситуациях, где действие должно произойти строго один раз — это делает игру чище, стабильнее и профессиональнее.
Made on
Tilda