音频播放发生在体验中发出音频的 Sound 对象上。Roblox 为每个 音频资产 分配独特的ID,您可以将其分配给 Sound 对象播放特定的音效或音乐曲目。您可以将此音频设置为在执行时间时自动播放,或触发它从脚本中播放 。
要修改多个 Sound 对象的播放,您可以将它们分配给一个 音效组 并控制整个群组的音量,还可以应用 动态效果 。
创建音效对象
您可以在三个位置创建 Sound 对象,每个位置都决定音频如何发射和音量在体验中用户位置与之相关的变化。
地点 | 音频如何发射 | 音量如何更改 |
---|---|---|
砖块、球或筒的子 BasePart 。 | 音频从零件的整个表面发出。 | 音量会根据用户的声音收听器与零件位置以及尺寸之间的距离进行调整。 |
孩子 of an Attachment , MeshPart , TrussPart , WedgePart , 或 CornerWedgePart . | 音频从单个附件点或零件中心发出。 | 音量会根据用户的声音收听器和附件/部件位置之间的距离进行调整。 |
在 SoundService 或 Workspace 内。 | 音频在整个体验中发出。 | 无论用户的音效收听者位置或旋转,音量和镜头位置都保持不变。 |
位置音频
位置音频是用户只能在体验中特定位置附近听到的音频。你可以使用两种类型的位置音频:音量和点源。
体积的
音量音频是最接近于现实的音频选择,因为它会根据用户对音源的位置动态更改。例如,如果用户位于 BasePart 中的子对象 Sound ,音频将在用户周围播放,与耳机中播放的音乐相似,每个扬声器的麦克风量相同。当用户离开零件时,音频逐渐减少音量并变得更具方向性,当收听者旋转时,移动到用户的头部周围。有关控制音频在不同距离处的音量的属性信息,请参阅 RollOffMinDistance 和 RollOffMaxDistance 。
BasePart的大小也会影响音频的音量,因为更大的BaseParts产生了更广的区域,用户可以听到音频,当用户从大的BasePart中导航时,音量会减慢。以下示例显示了一个 BasePart 大小为城市的对象播放环境音频的 Sound 对象。用户 A 和 B 体验音频不同:用户 B 更接近大型 BasePart ,他们主要在两个扬声器周围听到相同的音量。相反,用户 A 离城市更远,所听到的音频比用户 B 更安静且更具方向性,在每个扬声器上播放不同的音量。

立体声音频对任何需要沉浸于用户周围并根据用户位置动态更改的音频都有用,例如音乐舞台或雨落区域等。当你尝试将 Sound 对象放置在不同尺寸和位置的 BaseParts 上时,你可以听到如何沉浸式音频可以被。
要创建一个 Sound 体积音频对象:
在 探索器 窗口中,选择 音频服务 。
在 属性 窗口中,导航到 音量声音 属性,然后将其设置为 启用 。
在 浏览器 窗口中,将鼠标悬停在 BasePart 上,然后单击 ⊕ 按钮。将显示上下文菜单。
从菜单中插入一个 音效 。
在 属性 窗口中,导航到 SoundId 属性并输入有效的 音频资产ID。
(可选) 如果你想要体验开始播放时启用音频播放,请启用 播放 属性。
点源
与体积音频相反,点源音频只从单个点源发出。这种类型的音频对于爆炸、冲击声、电子设备和对话有用。
要创建一个 Sound 对点源音频的对象:
- 在 探索器 窗口中,将鼠标悬停在附件、楔形或角楔形上,然后单击 ⊕ 按钮。将显示上下文菜单。
- 从菜单中插入一个 音效 。
- (可选) 如果你想要体验开始播放时启用音频播放,请启用 播放 属性。
背景音频
背景音频无论用户在体验中移动到哪里都保持相同的音量播放。这种类型的音频对您想为用户播放的音乐有用,特别是当您想创建多个音频文件的音乐带时。
为了组织目的,最好将所有 Sound 对象保留在工作区的单个位置,继续添加和编辑体验中的音频,以保持背景音频。下面的例子将新的 对象存储在 容器下,因为这个服务决定了对象在体验中如何播放。
要创建一个 Sound 对象用于背景音频:
- 在 探索器 窗口中,将鼠标悬停在 音频服务 上,然后单击 ⊕ 按钮。显示上下文菜单。
- 从菜单中插入一个 音效 。
- (可选) 如果你想要体验开始播放时启用音频播放,请启用 播放 属性。
自定义音频对象
Sound 对象属性共同工作以影响用户体验您的音频,例如:
音量
Volume 属性允许您将音频的音量设置为从 0 (寂静) 到 10 (隆隆) 的任何地方。如果您想一次更改多个 Sound 对象的音量,将它们置于 音效组 下。
滚动关闭最小距离和滚动最大距离
RollOffMinDistance 和 RollOffMaxDistance 决定用户对位置音频的音量感知范围。对于体积声音, 是音频开始减少音量的最小距离,当客户端的收听器移开 从父 处,属性的最大距离是客户端收听器可以从物体表面听到音频的最大距离。

对于点源音频,RollOffMinDistance 和 RollOffMaxDistance 与立体声音频相似,但这些属性控制的淡化距离不会围绕对象,只会影响从点源出发的距离。

滚动关闭模式
RollOffMode 属性允许您决定音频如何渐变,因为用户的收听者和 Sound 对象的父之间的距离增加。您可以将此属性设置为 Enum.RollOffMode 枚列中的四个值之一。

滚动关闭模式 | 描述 |
---|---|
Inverse (默认) | 音量最初从 RollOffMinDistance 急剧下降,但音量逐渐减少的速度随着用户靠近达到 RollOffMaxDistance 变得更加缓慢。一旦它们达到 RollOffMaxDistance,音频就会沉默。 |
Linear | 音量在 RollOffMinDistance 和 RollOffMaxDistance 之间线性下降。一旦用户达到 RollOffMaxDistance ,音频就会静止。 |
InverseTapered | 当靠近 和用户靠近 时,音量会跟随逆向模型;当用户靠近 时,音量会跟随线性方形模型。音频在最大距离点静止。 |
LinearSquare | 音量在 RollOffMinDistance 和 RollOffMaxDistance 之间渐变,采用线性方程式关系。音频在最大距离点静止。 |
播放速度
PlaybackSpeed 属性可以让你确定音频播放的速度。例如,如果你将 PlaybackSpeed 设置为值 2 ,你的音频播放速度将提高两倍,音高提升一度。同样,如果你将其设置为值 0.5 ,你的音频播放速度将减慢两倍,音高降低一度。
PlaybackSpeed = 0.5 | PlaybackSpeed = 1.0 | PlaybackSpeed = 2.0 |
时间位置
TimePosition 属性显示,在几秒钟内,用户当前正在听到的音频样本内的哪个位置。这个属性对于仅播放音频样本的一部分或触发事件发生一次音频到达特定位置都有用。例如,以下代码示例导致颗粒发射器在有限时间范围内的音频轨道上发射白色环粒子。
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
-- 创建新部分
local part = Instance.new("Part")
part.Anchored = true
part.Color = Color3.new(0.75, 0.2, 0.5)
part.Size = Vector3.new(2, 1, 2)
part.Material = Enum.Material.Neon
part.Position = Vector3.new(0, 4, 0)
part.Parent = Workspace
-- 在零件上创建附件
local attachment = Instance.new("Attachment")
attachment.Position = Vector3.new(0, 0.5, 0)
attachment.Parent = part
-- 在附件上创建粒子发射器
local emitter = Instance.new("ParticleEmitter")
emitter.Rate = 5
emitter.Lifetime = NumberRange.new(1.5, 1.5)
emitter.Texture = "rbxassetid://1266170131"
emitter.Speed = NumberRange.new(1, 1)
emitter.Size = NumberSequence.new{NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(1, 6)}
emitter.Transparency = NumberSequence.new{NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.25, 0), NumberSequenceKeypoint.new(1, 1)}
emitter.Orientation = Enum.ParticleOrientation.VelocityPerpendicular
emitter.Parent = attachment
-- 在附件上创建一个声音
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://1835405646"
sound.Parent = attachment
-- 播放声音
sound:Play()
-- 开始检查是否应启用发射器
RunService.Heartbeat:Connect(function()
-- 在音频范围内启用发射器;否则禁用它
emitter.Enabled = sound.TimePosition >= 5 and sound.TimePosition < 20
end)
循环
Looped 属性可以让你在播放完成后重复音频。当设置为 true 时,Sound 对象的音频再次播放。这有助于应用到 背景音频 以确保您的体验永远不会突然寂静。
脚本声音对象
在音频上下文中播放
除了通过 对象的 属性自动播放音频外,您还可以通过调用 从相应的 对象上播放音频。例如:
local Workspace = game:GetService("Workspace")local sound = Instance.new("Sound")sound.SoundId = "rbxassetid://9120386436"sound.Looped = truesound.Parent = Workspacesound:Play()
或者,如果地方会包含多个轨道,你可以从 LocalScript 播放特定轨道:
local SoundService = game:GetService("SoundService")local musicTrack = SoundService:FindFirstChild("LucidDream")if musicTrack not musicTrack.IsPlaying thenmusicTrack:Play()end
播放界面音频
您可以通过连接一个 GuiObjects 对象到 按钮 事件听机来播放界面音频,例如 Sound ,如 Activated 。这可以让你向用户提供听觉反馈,例如当他们将鼠标悬停或按下时。
要在用户激活 Sound 或 TextButton 或 ImageButton 时播放对象的音频:
local SoundService = game:GetService("SoundService")
local button = script.Parent
local sound = SoundService:FindFirstChild("SOUND_NAME")
if not sound.isLoaded then
sound.Loaded:Wait()
end
local function onButtonActivated()
if sound and not sound.IsPlaying then
sound:Play()
end
end
button.Activated:Connect(onButtonActivated)