在本地播放 Roblox 上的音乐

Playing Music on Roblox locally

我的 Roblox 游戏中播放的本地音乐有点卡住了。

我在我的游戏中设置了一个脚本,其中一个脚本将 五个声音文件 插入到 玩家的 GUI 中。制作服务器时,这些声音确实会传到玩家 gui 中。

要播放声音,有部分设置会检查与玩家的碰撞,当他们检测到玩家时,他们将启动 中的 五种声音 之一玩家的 GUI.

其中一个部分的代码如下所示:

script.Parent.Touched:connect(function(hit)

if hit.Parent:FindFirstChild('Humanoid') then
    if game.Players[hit.Parent.Name].PlayerGui.Sound2.TimePosition < 1 then
        game.Players[hit.Parent.Name].PlayerGui.Sound2.Volume = 1
        game.Players[hit.Parent.Name].PlayerGui.Sound2:Play()
        game.Players[hit.Parent.Name].PlayerGui.Sound1:Stop()
        game.Players[hit.Parent.Name].PlayerGui.Sound4:Stop()
        game.Players[hit.Parent.Name].PlayerGui.Sound3:Stop()
        game.Players[hit.Parent.Name].PlayerGui.Sound5:Stop()
    end
end

end)

正如我所测试的那样,此脚本确实可以很好地检测玩家。该系统确实可以在 Roblox Studio 测试区运行,但是当使用它启动服务器时 none 会播放声音。

服务器确实将声音设置为正在播放,并且它们从服务器端在客户端显示为正在播放,但客户端并不认为它们正在播放并且它们不播放。

我确实启用了过滤功能,但这应该不会影响它...

我认为这很简单。我认为这是 SoundService 的一个功能。如果这不起作用,请纠正我,但我相信就是这样

soundobj = game.Players[hit.Parent.Name].PlayerGui.Sound2

game:GetService('SoundService'):PlayLocalSound(soundobj)

有关详细信息,请参阅 https://wiki.roblox.com/index.php?title=API:Class/SoundService/PlayLocalSound

一种方法是将声音作为 PlayerGui 的父级(我想你需要一个 ScreenGui),然后 :Play() 它们。

启用过滤是这不起作用的原因。

要解决此问题,您可以使用位于游戏 ReplicatedStorage 中的 RemoteEvent

声音必须放在 StarterGUI 中,并且应该有一个包含以下代码的本地脚本:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("REMOTE EVENT NAME")
script.Parent.Sound2.Playing = true

local function onNewPlayerFired(sound)
    script.Parent.Sound1.Playing = false
    script.Parent.Sound2.Playing = false
    script.Parent.Sound3.Playing = false
    script.Parent.Sound4.Playing = false
    script.Parent.Sound5.Playing = false

    script.Parent[sound].Playing = true

end

event.OnClientEvent:Connect(onNewPlayerFired)

在每个声音触发器部分应该有这样的代码:

local debounce = false

script.Parent.Touched:connect(function(hit)
    if debounce == true then return end
    debounce = true
    if hit.Parent:FindFirstChild('Humanoid') then
        local plr = game.Players:FindFirstChild(hit.Parent.Name)
        game.ReplicatedStorage.REMOTE EVENT NAME:FireClient(plr,"SOUND NAME")


    end
wait(2)
    debounce = false        

end)

我最近 运行 在制作音乐播放器时遇到了这个问题。它最终成为最愚蠢的事情,并且与 FE 息息相关。我的播放器在 Test Studio 工作,但给了我一整套错误代码清单,我只需将脚本更改为本地脚本即可修复这些错误代码。从字面上看,所有相同的代码都像在工作室中一样工作,但在客户端。我花了一整天的时间挠头和维基搜索来找出我的错误。 FE 最初对我来说是一场噩梦,但我开始喜欢它为我的游戏提供的安全性。 :)