音效与音乐

Time:10 分钟

当构建游戏时,经常会有开发者忽略掉游戏中声音与音乐的重要性。如果能对这两方面进行创造性地运用,则可以为你的游戏奠定感人肺腑或激动人心的基调、增添游戏悬念、更能让游戏中的角色栩栩如生。

Audio Marketplace(音频市场)

Toolbox(工具箱)窗口中单击 Marketplace(市场)选项卡,从菜单中选择 Audio(音频)即可在大量音频中进行搜索。

https://developer.roblox.com/assets/bltc40a4f446019c115/Toolbox-Marketplace-Audio.png

在此视图中,可以通过名称搜寻音频,也可以单击 https://developer.roblox.com/assets/blt9d572a0193f40209/Toolbox-Sort-Icon.png

按钮进行:

  • 通过 Creator(创造者)的搜寻(也就是发布该音频文件的 Roblox 用户)。

  • 通过 Sound Length (声音长度)的搜寻,可以籍此分辨较短的声音效果与较长的音乐。

  • 对音频文件进行 Sort(排序)。排序种类分为按相关程度排序(最为常用)、按获取 “favorite”(收藏)票数排序、按最近更新排序、以及按评分高低排序。

在 Studio 中可以直接对音频文件进行预览,只需单击音频项角落的 play (播放)按钮即可。找到想要使用的音频文件后,右击音频项,选择 Copy Asset ID (复制资源 ID)即可(在下文中的回放测试中将会需要该 ID)。

https://developer.roblox.com/assets/blta9affb74e78ec98f/Audio-Item-Play-Button.png

1. 预览

https://developer.roblox.com/assets/blte2d2f653ecf00317/Audio-Item-Copy-ID.png

2. 右击复制 ID

上传自定义音频

在 Roblox 中上传音频文件时需要花费少量 Robux —— 这是因为我们需要花费时间对用户上传的每个声音文件进行审核。

请注意:如果你对该声音文件没有所有权或使用权,则将其上传和/或使用的行为是对 Roblox 服务条款的违背。

将音频上传至 Roblox 网站:

  1. 访问 Create Audio(创建音频)页面后,系统将会 提示你上传本地文件并为其命名。音频文件的格式必须为 .mp3.ogg、时长需要小于 7 分钟、且大小不能超过 19.5 MB。

  2. 单击 Estimate Price (预估价格)按钮。音频文件的上传费用率取决于以下定价结构:

时长 价格

0 – 10 秒 https://developer.roblox.com/assets/blt0fffb3baccc585f5/Robux-Icon-Small.png

20

10 – 30 秒 https://developer.roblox.com/assets/blt0fffb3baccc585f5/Robux-Icon-Small.png

35

30 秒– 2 分钟 https://developer.roblox.com/assets/blt0fffb3baccc585f5/Robux-Icon-Small.png

70

2 – 7 分钟 https://developer.roblox.com/assets/blt0fffb3baccc585f5/Robux-Icon-Small.png

350

  1. 单击 Purchase (购买)按钮,上传音频文件。

  2. 上传完毕后,音频文件将会显示在页面列表中。点击文件名称打开其独立页面,并从浏览器窗口 URL 中复制或记录其数字 ID(在下文中的回放测试中将会需要该 ID)。

https://www.roblox.com/library/1837103530/Lucid-Dream

播放音乐

通过编写脚本,开发者可以在游戏中播放背景音乐。方法如下:

  1. 在 Studio 的管理器窗口中向 ReplicatedStorage 添加新的 ModuleScripthttps://developer.roblox.com/assets/blt03909b07be91ea1d/ReplicatedStorage-ModuleScript.png

  2. 将新的脚本重命名为 AudioPlayerhttps://developer.roblox.com/assets/blt9cc3935af7f9fa0a/Rename-Script-AudioPlayer.png

  3. 删除脚本中所有现存行后,粘贴下列代码:

    
    local AudioPlayer = {}
    
    -- Roblox 服务
    local ContentProvider = game:GetService("ContentProvider")
    
    -- 预加载音频资源的函数
    AudioPlayer.preloadAudio = function(assetArray)
    	local audioAssets = {}
    
    	-- 将新的 “Sound” 资源添加至 “audioAssets” 数组
    	for name, audioID in pairs(assetArray) do
    		local audioInstance = Instance.new("Sound")
    		audioInstance.SoundId = "rbxassetid://" .. audioID
    		audioInstance.Name = name
    		audioInstance.Parent = game.Workspace
    		table.insert(audioAssets, audioInstance)
    	end
    
    	local success, assets = pcall(function()
    		ContentProvider:PreloadAsync(audioAssets)
    	end)
    end
    
    -- 播放音频资源的函数
    AudioPlayer.playAudio = function(assetName)
    	local audio = game.Workspace:FindFirstChild(assetName)
    	if not audio then
    		warn("Could not find audio asset: " .. assetName)
    		return
    	end
    	if not audio.IsLoaded then
    		audio.Loaded:wait()
    	end
    	audio:Play()
    end
    
    return AudioPlayer

为了能够播放音频文件,必须先将其下载到客户端(Roblox 应用程序)并加载。视文件大小不同,这可能需要一些时间。因此,建议通过模块的 preloadAudio() 函数 (第 7 至 22 行)和 ContentProvider/PreloadAsync|ContentProvider:PreloadAsync()(第 20 行)来预加载音频文件。

  1. StarterPlayerScriptsStarterPlayer 的子项)内创建一个新的 LocalScripthttps://developer.roblox.com/assets/bltc1618e724ad60ee8/StarterPlayerScripts-LocalScript.png

  2. 删除脚本中所有现存行,然后粘贴以下代码。如有需要,从第 9 行开始输入其他音轨名称和音频 ID(请参阅上文中的音频市场或上传自定义音频)。

    
    -- Roblox 服务
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    
    -- 对模块进行 Require
    local AudioPlayerModule = require(ReplicatedStorage:WaitForChild("AudioPlayer"))
    
    -- 预加载音乐音轨
    AudioPlayerModule.preloadAudio({
    	["Lucid_Dream"] = 1837103530,
    	["Desert_Sands"] = 1848350335
    })
    
    -- 播放音乐音轨
    AudioPlayerModule.playAudio("Lucid_Dream")

  1. 测试游戏,你会听到背景中播放第 14 行中所指定名称的音轨。

    
    -- 播放音乐音轨
    AudioPlayerModule.playAudio("Lucid_Dream")

播放音效

不同于背景音乐,音效通常源自于游戏中的特定场景或对象——例如车辆的引擎轰鸣声、战场上敌人的怒吼声等。不过,这些音效也能以“环境”音效的形式播放,例如风声或雨声等。

3D 音效

放置在 BasePartAttachment 中的音效会从部件的 BasePart/Position|Position (位置)或附件的 Attachment/WorldPosition|WorldPosition 处发出声音。这些音效被称作 3D 音效,而且都具备下列几种共同特征:

  • 音量 — 3D 音效的音量会随着玩家接近声源而提高。

  • 立体声 — 如果玩家的一侧距离声源较近,对应方向的扬声器音量就会较大。

  • 多普勒效应 — 如果 3D 音效的声源正在逼近玩家,声调就会升高。同样地,如果声源正在远离玩家,声调就会降低。

如果 3D 声效的源部件/附件已存在于某一场景中,则可直接在 Studio 内对其进行添加:

  1. 在 Explorer(管理器)窗口中,插入一个新的 Sound 对象作为源对象的子项。 https://developer.roblox.com/assets/blt6409bd6e49534acf/Insert-3D-Sound.png

  2. 选中新的音效对象,在其 Properties(属性)窗口中找到其 SoundId 属性。输入 rbxassetid://,后面填写有效的音频 ID。例:rbxassetid://1847352423。 https://developer.roblox.com/assets/blt4f90c628f603e1b2/Specify-Sound-ID.png

  3. 切换其 Playing 属性至开启(音效不会自动播放,需要明确指示其开始播放)。 https://developer.roblox.com/assets/blt6c0e7520534801dd/Toggle-Sound-Playing.png

  4. 测试游戏,根据角色与声源的距离观测 3D 音效的音质。

环境音效

风声和雷鸣等环境音效无需附加至部件,因为这些音效将会充斥整个场景。正因如此,此类音效可以使用上文播放音乐中所示的相同脚本来进行播放。

GUI 音效

用于交互式 GUI 对象的音效可以使用上文播放音乐中所示的相同 ModuleScript 来播放。但这样将会立即播放音效,因此可以将其连接至相关按钮的 GuiButton/Activated|Activated (已激活)事件监听器。

  1. StarterGui 中添加新的 ScreenGui,然后在其中创建新的 TextButton。如果你对按钮及其基本选项并不熟悉,请参阅 articles/Creating GUI Buttons|创建 GUI 按钮一文。

  2. 选中新的按钮,对其插入 LocalScript

https://developer.roblox.com/assets/blta51533314e36660b/TextButton-LocalScript.png

  1. 删除脚本中所有现存行,粘贴以下代码。如有需要,在第 9 行输入其他音效名称和音频 ID。

    
    -- Roblox 服务
    local ReplicatedStorage= game:GetService("ReplicatedStorage")
    
    -- 对模块进行 Require
    local AudioPlayerModule = require(ReplicatedStorage:WaitForChild("AudioPlayer"))
    
    -- 预加载音效
    AudioPlayerModule.preloadAudio({
    	["Simple_Click"] = 3061551819
    })
    
    -- 对按钮进行引用
    local textButton = script.Parent
    
    -- 当按钮被按下时激活的函数
    local function onButtonActivated()
    	AudioPlayerModule.playAudio("Simple_Click")
    end
    textButton.Activated:Connect(onButtonActivated)

  1. 测试游戏,激活按钮后,你会听到第 17 行中所指定名称的音效。

    
    -- 当按钮被按下时激活的函数
    local function onButtonActivated()
    	AudioPlayerModule.playAudio("Simple_Click")
    end
    textButton.Activated:Connect(onButtonActivated)

***Roblox官方链接:音效与音乐