在本地Roblox上播放音乐

时间:2018-07-19 18:40:57

标签: audio lua roblox

我对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测试区域中正常工作,但是在启动服务器时,不会播放任何声音。

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

我确实启用了过滤功能,但这不会对其起作用...

4 个答案:

答案 0 :(得分:0)

我相信这很简单。我认为这是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

答案 1 :(得分:0)

一种实现方法是将声音作为播放器的父母(我认为您需要一个ScreenGui),然后对它们进行:Play()。

答案 2 :(得分:0)

启用过滤是此方法不起作用的原因。

要解决此问题,您可以使用位于游戏 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)

答案 3 :(得分:0)

我最近在制作音乐播放器时遇到了这个问题。最终成为最愚蠢的事情,并且与FE息息相关。我的播放器在Test Studio中工作,但是给了我完整的错误代码清单,我只需将脚本更改为本地脚本就可以解决。从字面上看,所有相同的代码都像在工作室中一样工作,只是在客户端。我花了整整一天的时间来摸索和查找Wiki,以弄清我的错误。最初,富裕对我来说是一场噩梦,但我已经开始喜欢它提供的游戏安全性。 :)