音頻播放發生在體驗內發出音頻的 Sound 對象上。Roblox 為每個 音頻資產 分配獨特的ID,您可以將其分配給 Sound 對象播放特定的音效或音樂曲目。您可以將此音頻設置為在執行階段時自動播放,或觸發它從腳本中播放 。
若要修改多個 Sound 物件的播放,您可以將它們分配給一個 音效群組 並控制整個群組的音量,以及應用 動態效果。
創建聲音對象
您可以在三個位置創建 Sound 對物件,每個位置都會決定音頻如何發射和音量在體驗內的用戶位置方面的變化。
位置 | 音頻如何發射 | 音量變更的方式 |
---|---|---|
方磚塊、球或圓筒的子 BasePart 。 | 音頻從零件的整個表面發出。 | 音量會根據使用者聲音聆聽器與零件位置以及尺寸而變化。 |
孩子的 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 上,然後單擊 ⊕ 按鈕。一個上下文菜單顯示。
從選單中插入 聲音 。
在 屬性 窗口中,導航到 聲音ID 屬性並輸入有效的 音訊資產ID。
(可選) 如果您希望音頻在體驗開始時播放,啟用 播放 屬性。
點原始碼
與體積音頻相反,點源音頻只從單一點原始碼發出。這種音訊對於爆炸、衝擊聲、電子裝置和對話有用。
要創建一個 Sound 對點源音訊的物件:
- 在 導航器 窗口中,將鼠標懸停在附件、桁架、楔形或角楔形上,然後單擊⊕按鈕。一個上下文菜單顯示。
- 從選單中插入 聲音 。
- (可選) 如果您希望音頻在體驗開始時播放,啟用 播放 屬性。
背景音訊
背景音響在體驗內的任何地方播放相同音量,無論使用者在哪裡旅行。這種音訊類型對於你想為使用者播放的音樂特別有用,特別是當你想創建多個音訊檔案的音軌時。
為了維持體驗內的音頻質量,最好將所有 Sound 對象保留在工作區單一位置,用於背景音頻的目的,當你繼續添加和編輯體驗內的音頻時。下面的例子將新的 Sound 對象存儲在 SoundService 容器下,因為此服務決定如何 Sound 對象在體驗中播放。
要創建一個 Sound 對象以用於背景音音訊:
- 在 導航器 窗口中,將鼠標懸停在 音訊服務 上,然後單擊⊕按鈕。一個上下文菜單顯示。
- 從選單中插入 聲音 。
- (可選) 如果您希望音頻在體驗開始時播放,啟用 播放 屬性。
自訂聲音對象
Sound 物件屬性會一起工作,以影響使用者體驗您的音訊,例如:
音量
Volume 屬性允許您在任何地方設置音頻的音量,從 0 (寂靜) 到 10 (隆隆聲)。如果您想一次變更多個 Sound 對象的音量,將它們納入 聲音群 中。
滾動關閉最小距離和滾動最大距離
RollOffMinDistance 和 RollOffMaxDistance 決定使用者對位置音訊的音量感知範圍。對於體積音訊,RollOffMinDistance 是音訊開始減少音量時客戶端聆聽器 遷移 離父親BasePart的最小距離,而RollOffMaxDistance屬性是客戶端聆聽器能從物件體表面聽到音訊的最大距離。

對於點源音訊,RollOffMinDistance 和 RollOffMaxDistance 與音量音訊相似,但這些控制音量的距離不會圍繞物物件,只會影響從點原始碼到出口的距離。

滾動關閉模式
屬性允許您決定音頻在距離用戶聽眾和對象父親之間增加時如何減退。您可以將此屬性設為 Enum.RollOffMode 枚列的四個值之一。

滾動關閉模式 | 說明 |
---|---|
Inverse (預設) | 音量最初會突然從 RollOffMinDistance 褪色,但音量褪色的速度會隨著用戶接近達到 RollOffMaxDistance 而變得更加平緩。一旦達到 RollOffMaxDistance ,音頻就靜止了。 |
Linear | 音量在 RollOffMinDistance 和 RollOffMaxDistance 之間線性減少。一旦用戶達到 RollOffMaxDistance ,音頻就靜止了。 |
InverseTapered | 當靠近 和用戶靠近 時,音量會遵循逆向模型;當用戶靠近 時,音量會遵循線性方形模型。音頻在最大距離點靜止。 |
LinearSquare | 音量在 RollOffMinDistance 和 RollOffMaxDistance 之間減弱,使用線性方形關係。音頻在最大距離點靜止。 |
播放速度
屬性可讓您確定音頻播放的速度。例如,如果你將 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)