声音对象

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

音频播放通过 Sound 对象发生,其发出的音频在体验中播放。 Roblox 为每个 Class.Sound 对象分配一个唯一的 ID,您可以将其分配到 Sound 对象播放特定音效或音乐曲。您可以将此音频设置为自动在执行时间行时播放,或触发它来播放从脚本中 2>playFrom

要修改多个 Sound 对象的播放,您可以将它们分配到一个 声音群组 并控制整个群组的音量,还可以应用 动态效果。

创建声音对象

有三个位置您可以创建一个 Sound 对象,每个位置都决定音频发射和音量变化与用户位置在体验中的关系。

地点如何播放音频音量变更
砖块、球或圆柱的子 BasePart音频从零件的整个表面发出。音量会随着用户声音听器和零件位置之间的距离以及其大小而变化。
Class.AttachChild 的子,MeshPartTrussPart,1>Class.WedgePart1> 或 4>Class.CornerWedgePart4> 。音频从单个附件点或部分中心发出。音量会随着用户的音效听器和附件/零件位置的距离而改变。
SoundServiceWorkspace 内。音频在整个体验中发出。音量和方向都是一致的,无论用户的音频听取器位置或旋转。

位置音频

位置音频是用户在体验中只能听到的音频。有两种位置音频类型:音量和点源。

体积

音量是最真实的音频选项,因为它随着用户的位置对音频源的动态变化而改变。例如,如果用户位于BasePart 中一个子 Class.Sound

Class.Base

音乐的空间音效是为了满足用户需求而设计的,例如演唱会舞台或雨落等。当您尝试放置 Sound 对象在 BaseParts 不同大小和位置时,您可以听到音乐的空间音效有多么沉浸。

要创建一个 Sound 对象用于音量音音频:

  1. Explorer 窗口中,选择 SoundService

  2. 属性 窗口中,导航到 音量音效 属性,然后将其设置为 启用

  3. Explorer 窗口中,将鼠标悬停在一个 BasePart 上,然后单击“⊕”按钮。一个上下文菜单显示。

  4. 从菜单中,插入一个 声音

  5. 属性 窗口中,导航到 SoundId 属性,然后输入一个有效的 音频资源 ID

  6. (可选) 如果您想要音频开始播放体验开始时,启用 播放 属性。

点源

与音量音效不同,点源音频只能从一个点源发生。这种类型的音频对于爆炸、冲击噪音、电子设备和对话非常有用。

要创建一个 Sound 对象为点源音频:

  1. Explorer 窗口中,将鼠标悬停在一个附件、桁架、楔形或角楔形上,然后单击 ⊕ 按钮。一个上下文菜单显示。

  2. 从菜单中,插入一个 声音

  3. 属性 窗口中,导航到 SoundId 属性,然后输入一个有效的 音频资源 ID

  4. (可选) 如果您想要音频开始播放体验开始时,启用 播放 属性。

背景音频

背景音乐在您的体验中播放相同的音量,无论用户在您的体验中移动。 此类音频对于您想要播放给用户的音乐,尤其是您想要创建多个音频文件的音乐列表,非常有用。

为了在您继续添加和编辑音频内的体验中使用背景音频,您最好将所有 Sound 对象保留在工作区的一个单一位置,因为这个服务决定如何在体验中播放 Sound 对象。以下示例存储新的 SoundService 对象,因为这个服务确定如

要为背景音频创建一个 Sound 对象:

  1. Explorer 窗口中,将鼠标悬停在 SoundService 上,然后单击 ⊕ 按钮。一个上下文菜单显示。

  2. 从菜单中,插入一个 声音

  3. 属性 窗口中,导航到 SoundId 属性,然后输入一个有效的 音频资源 ID

  4. (可选) 如果您想要音频开始播放体验开始时,启用 播放 属性。

  5. (可选) 如果此 Sound 对象是您想要在此播放的唯一场景道,启用其 循环 属性。

自定义声音对象

Sound 对象属性工音频 together to influence how users experience your audio, such as:

音量

Class.Sound.Volume|Volume 属性允许您在0 (沉默) 到10 (爆炸)之间设置音频的音量。如果您想要将多个1>Class.Sound1>对象在一起,请在4>声音群4>下父级。

滚动最大距离和滚动最大距离

RollOffMinDistance 和 Class.Sound.RollOffMaxDistance|RollOffMax

对于点源音频,RollOffMinDistanceRollOffMaxDistance工作与音量音频类似,但这些属性控制的卷落距离不包围对象,它只会影响点源音频的距离向外。

卷落模式

Class.Sound.RollOffMode|RollOffMode 属性允许您决定音频在距离用户的听众和 Sound 对象的父级增加时如何渐变。您可以将此属性设置为四个值的 Enum.RollOffMode 枚。

卷落模式描述
Inverse (默认)音量最初会从RollOffMinDistance跌落,但音量会逐渐变得更加渐变,直到用户靠近RollOffMaxDistance。当他们达到RollOffMaxDistance时,音频就会静止。
Linear音量在 RollOffMinDistanceRollOffMaxDistance 之间逐渐消失。当用户到达 RollOffMaxDistance 时,音量将静止。
InverseTapered音量跟随倒数模型,当靠近 RollOffMinDistance 和直线方形模型,当用户靠近 RollOffMaxDistance 。音频在最大距离点静止。
LinearSquare音量在 RollOffMinDistanceRollOffMaxDistance 之间以直线方式变化。音频在最大距离点上接近沉默。

播放速度

Class.Sound.PlaybackSpeed|PlaybackSpeed 属性允许您确定播放音频的速度。例如,如果您将 PlaybackSpeed 设置为值 2 ,您的音频播放速度将是原来的两倍,而且音调高度为原来的两倍。同样,如果

时间位置

Class.Sound.TimePosition|TimePosition 属性显示,以秒显示用户当前听到的音频样本中的位置。 此属性对于播放仅部分音频样本或触发事件发生一次音频到达特定位置的时间范围。 例如,以下代码示例会使一个粒子 emitter 在一个限时范围内发生一个白色环粒子。


local RunService = game:GetService("RunService")
-- 创建一个新的部分
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()
-- 开始检查是否启用 emitter
RunService.Heartbeat:Connect(function()
-- 在音频的时间范围内启用发射器;否则,禁用它
if sound.TimePosition >= 5 and sound.TimePosition < 20 then
emitter.Enabled = true
else
emitter.Enabled = false
end
end)

循环

Class.Sound.Looped|Looped 属性允许您在音频播放完成后重复播放音频。当设置为 true 时,音频播放对象的音频再次播放。这很有用于应用于 Sound 以确保您的体验永远不会突然寂静。

脚本声音对象

播放音频上下文

除了通过 Sound 对象的 Playing 属性自动播放音频外,您可以通过调用 LocalScript 中的 1> Class.Sound:Play()|Play()1> 来播放音频上下文。例如:


local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://9120386436"
sound.Looped = true
sound.Parent = workspace
sound:Play()

或者,如果该地方将包含多个轨道,您可以从 LocalScript 中播放特定轨道:


local SoundService = game:GetService("SoundService")
local musicTrack = SoundService:FindFirstChild("LucidDream")
if musicTrack not musicTrack.IsPlaying then
musicTrack:Play()
end

播放界面音频

您可以通过将 GuiObjects 对象绑定到 Class.GuiButton.Activated|Activated 事件听取器来播放界面音频。 此方法可以让您向用户提供音频反馈,例如当用户将鼠标悬停在某个 Sound 对象上或按下时。

要播放一个 Sound 对象的音频,当用户激活一个 TextButtonImageButton :

  1. Explorer 窗口中,将鼠标悬停在 TextButtonImageButton 上,然后单击 1>⊕1> 按钮。一个上下文菜单显示。
  2. 从菜单中,插入一个 LocalScript 或一个 Script 以及一个 RunContext 设置在 2>Ennum.RunContext.Client2> 上。
  3. 将以下代码粘贴到脚本中,然后将 SOUND_NAME 替换为 Sound 对象的名称,位于 SoundService 容器内。

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)