Разработка игрLua / Luau

Как добавить фоновую музыку в Roblox Studio: запуск, повтор и громкость

Добавляем фоновую музыку в Roblox Studio: выбираем аудио, создаём Sound в SoundService, включаем Looped, настраиваем Volume и проверяем загрузку.

Кодик

Автор

5 мин чтения

Для одинаковой фоновой музыки во всей игре поместите Sound в SoundService. Задайте SoundId, включите Looped, начните с Volume около 0.25 и запустите Play после загрузки аудио.

Музыка из SoundService не привязана к точке в мире, поэтому игрок слышит её одинаково в любом месте. Для костра, машины или водопада нужен позиционный звук внутри 3D-объекта. Не смешивайте эти задачи, иначе громкость будет вести себя неожиданно.

1Выбираем

Берём аудио из Creator Store или свой допущенный ассет.

2Настраиваем

SoundId хранит адрес, Looped повторяет, Volume ограничивает уровень.

3Запускаем

Ждём Loaded, вызываем Play и не создаём вторую копию.

Где хранить фоновую музыку

Создайте Sound в SoundService и назовите BackgroundMusic. В SoundId вставляется rbxassetid:// и числовой ID. Если аудио не принадлежит вам и не разрешено для experience, пустая кнопка Play его не исправит. Первым делом сверяйте права и Output.

СценарийГде SoundЧто слышно
Фоновая музыкаSoundServiceОдинаково везде
Костёр в миреPart или AttachmentГромче рядом
Звук кнопкиSoundService или UI-кодОдноразово
Музыка локацииОтдельная группаМеняется по зоне

После этого шага у каждой части есть одна роль. Интерфейс собирает действие, логика меняет состояние, а вывод показывает признак успеха. Это проще отлаживать, чем один большой обработчик.

Как музыка начинает играть
Один Sound и один путь загрузки. Volume можно менять во время игры

Сначала соберите минимальный сценарий. Не добавляйте оформление, хранение и дополнительные режимы одновременно. Добейтесь одного правильного прохода от входных данных до результата, а затем проверяйте каждое улучшение отдельно.

Создаём Sound и запускаем его кодом

Для фона достаточно одного Sound. Скрипт сначала ищет его, устанавливает безопасную громкость и цикл. Если IsLoaded ещё false, мы ждём событие Loaded с тайм-аутом, чтобы не зависнуть на недоступном ассете.

local SoundService = game:GetService("SoundService")
local ContentProvider = game:GetService("ContentProvider")

local music = SoundService:WaitForChild("BackgroundMusic")
music.SoundId = "rbxassetid://1234567890" -- замените ID
music.Looped = true
music.Volume = 0.25

local ok, message = pcall(function()
    ContentProvider:PreloadAsync({ music })
end)

if ok and music.IsLoaded then
    music:Play()
else
    warn("Музыка не загрузилась:", message)
end
Что должно работать после первого запуска

Трек предзагружается до Play. Looped запускает новый цикл после конца. Volume 0.25 оставляет место для эффектов и голоса. Ошибка загрузки появляется в Output.

2D и 3D звук
Место Sound меняет поведение. Сравнение показывает, какой вариант легче поддерживать и проверять.

Как работают Looped, Volume и Loaded

Volume изменяет амплитуду, но не делает плохую запись чистой. Если трек уже клиппирует и хрипит, снижение Volume только скроет часть проблемы. Для нескольких категорий звука используйте SoundGroup: отдельно Music, Effects и UI. Тогда ползунок настроек меняет группу, а не каждый Sound.

СвойствоЗначениеЭффект
SoundIdrbxassetid://IDВыбирает аудио
LoopedtrueПовторяет трек
Volume0.25Оставляет запас для эффектов
Playingtrue после PlayПоказывает текущее состояние

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

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

Практика: слушаем на трёх устройствах

Громкость проверяют не по динамикам одного ноутбука. На телефоне меньше низких частот, в наушниках контраст сильнее, а на громких колонках утомляет повторяющаяся петля. На каждом устройстве сверьте, что музыка слышна, но не перекрывает важные сигналы.

Проверка своими руками
  1. Добавьте разрешённый audio ID и запустите Play.
  2. Убедитесь, что трек начался один раз и не наложился на себя.
  3. Дождитесь конца и проверьте плавный повтор.
  4. Сравните Volume 0.15, 0.25 и 0.5 со звуками шагов.
  5. Запустите мобильную эмуляцию и наушники.
  6. Вставьте неверный ID и проверьте понятный warn в Output.
Готово, если выполняются все пункты

Музыка начинается без двойного запуска. Петля не даёт заметной паузы или щелчка. Шаги, UI и другие сигналы остаются разборчивыми. Недоступный ассет не ломает остальную игру.

Звуковой чек-лист
Прослушайте до публикации. Пройдите все четыре сценария перед публикацией проекта.

Доводим звук до игрового баланса

Добавьте в настройки отдельный ползунок Music и храните его выбор на клиенте. Не запускайте музыку и в Properties, и в скрипте одновременно. Выберите один источник правды, иначе после респавна или перезахода появятся две копии. Сам трек должен иметь права на использование в experience.

Sound лежит в Part

Так звук станет позиционным, а не фоновым.

Volume = 1

Музыка закроет эффекты и быстро утомит.

Два скрипта вызывают Play

Копии наложатся и дадут эхо.

Чужой ID без прав

Аудио не загрузится, даже если число указано верно.

Сверьтесь с первичным источником. Поведение используемых функций и ограничения примера проверяйте по учебником Roblox по 2D-аудио. Документация особенно важна, когда меняются версии, политика платформы или формат ответа API.

Что получится в итоге

Готовый результат проекта: Как добавить фоновую музыку в Roblox Studio: запуск, повтор и громкость
Готовая сцена получает фоновую музыку, которая не зависит от позиции игрока и не перекрывает эффекты.

Короткие ответы
Где хранить фоновую музыку?

В SoundService, если она должна звучать одинаково во всём мире.

Зачем Looped?

Он автоматически запускает трек с начала после конца.

Почему аудио молчит?

Чаще всего неверен SoundId, нет прав на ассет или загрузка завершилась ошибкой.

Как понять, что проект готов?

Он повторяет целевой сценарий несколько раз подряд, понятно реагирует на ошибочный ввод и не теряет состояние при обычных действиях.

Можно ли копировать код целиком?

Можно как стартовую точку, но сначала замените значения из примера, затем запустите проект по шагам. Если вы не можете объяснить одну строку, её лучше разобрать до следующего шага.

Добавьте звук, который помогает игроку

События, объекты и Luau можно закрепить в курсе Lua. Музыку удобно запускать после стартового меню.

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