Урок Roblox StudioЗанятие 5 / 8

Звуковые зоны

Менять звук по местоположению

Звуковые зоны
Иллюстрация к теме занятия

Цель

Сделать две области с самостоятельными звуками без одновременной громкой музыки

Подготовка

Workspace → ForestZone и CaveZone (Anchored Part, Transparency=1, CanCollide=false), оба размера 30×14×30. SoundService → ForestSound и CaveSound (доступные SoundId); StarterPlayer → StarterPlayerScripts → LocalScript.

Пошаговая работа

  1. Подготовь две зоны, не накладывающиеся друг на друга; вставь свои разрешённые аудио ID.
  2. У обоих Sound поставь Looped=true, Volume=0 и Playing=true.
  3. Добавь LocalScript для определения позиции игрока и плавного изменения громкости.
  4. Перейди из леса в пещеру, затем выйди из обеих зон.

Пример Luau

local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local SoundService = game:GetService("SoundService")
local player = Players.LocalPlayer
local zones = {
    {part = workspace:WaitForChild("ForestZone"), sound = SoundService:WaitForChild("ForestSound")},
    {part = workspace:WaitForChild("CaveZone"), sound = SoundService:WaitForChild("CaveSound")},
}
local function inside(part, position)
    local p = part.CFrame:PointToObjectSpace(position)
    local half = part.Size * 0.5
    return math.abs(p.X) <= half.X and math.abs(p.Y) <= half.Y and math.abs(p.Z) <= half.Z
end
for _, z in ipairs(zones) do z.sound.Volume = 0; z.sound.Looped = true; z.sound:Play() end
local active = nil
while task.wait(0.35) do
    local char = player.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    local nextZone = nil
    if root then
        for _, z in ipairs(zones) do if inside(z.part, root.Position) then nextZone = z; break end end
    end
    if nextZone ~= active then
        active = nextZone
        for _, z in ipairs(zones) do
            TweenService:Create(z.sound, TweenInfo.new(0.6), {Volume = z == active and 0.45 or 0}):Play()
        end
    end
end

Проверка

Пройди три состояния: лес, пещера, вне зон; проверь, что музыка из другой зоны затихает.

В каждой зоне звучит своя атмосфера; вне зон обе записи тихие. При перекрытии зон приоритет у ForestZone.

Ошибка и ограничения

Не используй чужие недоступные аудиофайлы. Если звук не слышен, проверь разрешения аудио и SoundId.

Усложнение

Добавь третью зону и обсуди приоритет областей при пересечении.

Проверь пример в тестовой Roblox Studio перед публикацией. Используй отдельные копии проектов и соблюдай права на аудио и анимации.

Проверь свою работу

Перед тестом убедись, что ты выполнил практику самостоятельно.

Эти отметки — личная памятка, они не влияют на звёзды.

Проверь себя

Ответь на вопросы урока. Успешный тест даёт одну звезду в личном кабинете.

⭐ Проверь свои знания

5 вопросов по теме урока. За 4 правильных ответа получишь звезду. Повторные попытки разрешены.

1. Почему два атмосферных Sound одновременно на полной громкости — плохая идея?
2. Какое свойство Sound изменяют для плавного затухания?
3. Как плавно менять громкость при входе в пещеру?
4. Лесная музыка слышна во всей карте. Что проверить для локального 3D-звука?
5. Игрок быстро бегает между зонами. Что следует предусмотреть?