除了背景音乐外,游戏音频可以增强玩家的体验。 此教程将涵盖两种游戏音效: 位置 和 反馈 音效。
对于第一个例子,您将为瀑布创建一个位置声音。 在第二个例子中,脚本将用于当玩家触摸到收集物品时播放铃铛。
位置声音
当一个 声音 对象与一个部件或附件相关时,它会变成位置。音频从其位置发出,随着玩家靠近,在这个瀑布中的情况就越来越大。
创建一个声音
在任何所需的部分上,创建一个名为 WaterfallSound 的新 声音 对象。
在属性中,找到 SoundId 并将其更改为此瀑布环境: rbxassetid://6564308795 。
开始游戏时,切换 播放 和 循环 来成为 开启 .
测试游戏以确认您听到瀑布的水景。
调整音效距离
测试时注意,音频即时播放,即使玩家远离对象。 使用卷轴属性,您可以修改玩家听到声音的距离,以创建渐变效果。
将 RollOffMaxDistance 变更为 30 。 此属性用钉子表示。
对于更平滑的渐变,请将 RollOffMode 更改为 InverseTapered 。这使声音的接近感更加自然。
运行项目。注意声音只能在对象附近听到。
精确调整卷轴
根据您的需求,您可能需要调整不同的属性以实现特殊效果或提高现实主义。请参阅以下属性:
- RollOffMinDistance - 最小距离(以格为单位) - 音量会下降。
- SoundGroup - 用于调整和平衡音效之间的音量,例如背景音乐和游戏效果。
反馈声音
您可以使用脚本在命令中播放声音。 您可以将声音连接到事件,例如玩家触摸某个部件或与菜单交互。 在这里,您创建一个在玩家触摸可收集对象时播放铃铛的脚本。
设置收藏品
本教程的剩余部分使用预制模型。 此模型包括零件和脚本,以便玩家可以收集宝石。
- 在浏览器中,打开 收集可能宝石模型 页面,然后单击 获取 按钮。
- 在 Studio 中,去到视图选项卡,然后单击工具箱。
- 在工具箱窗口中,单击 物品栏 按钮。然后确保弹出菜单是在 我的模型 上。
- 选择 可收集宝石 模型,将其添加到游戏中。
在 SoundService 中,创建一个名为 FeedbackSound 的新 声音 。
在 FeedbackSound 中,将 SoundId 设置为 rbxassetid://4110925712 - 模型页面上下载的简单铃铛的声音ID。
设置脚本
在 新手玩家 > StarterPlayerScripts 中,创建一个名为 收集可声音效果 的新本地脚本。
下面的代码将在玩家触摸到可收集的任何地方时运行 partTouched 函数。复制代码到您的脚本。
local pickupObjects = workspace.Collectables.Objectslocal objectsArray = pickupObjects:GetChildren()local function partTouched(otherPart, objectPart)local whichCharacter = otherPart.Parentlocal humanoid = whichCharacter:FindFirstChildWhichIsA("Humanoid")if humanoid and objectPart.CanCollide == true thenendend-- 将每个对象零件绑定到触摸功能,以便在所有零件上都能使用for objectIndex = 1, #objectsArray dolocal objectPart = objectsArray[objectIndex]objectPart.Touched:Connect(function(otherPart)partTouched(otherPart, objectPart)end)end
播放声音
为 SoundService 创建变量,然后为 存储反馈声音 的另一个变量。
local pickupObjects = workspace.Collectables.Objectslocal objectsArray = pickupObjects:GetChildren()local SoundService = game:GetService("SoundService")local feedbackSound = SoundService:FindFirstChild("FeedbackSound")local function partTouched(otherPart, objectPart)要播放铃铛,请找到函数 partTouched 。在 if 声明中,调用 feedbackSound:Play() 来播放声音。
local function partTouched(otherPart, objectPart)local whichCharacter = otherPart.Parentlocal humanoid = whichCharacter:FindFirstChildWhichIsA("Humanoid")-- 播放声音,一旦完成,就删除对象if humanoid and objectPart.CanCollide == true thenfeedbackSound:Play()endend测试游戏,确认当玩家触摸一个可收集物品时,它不仅会消失,还会发出声音。