如何使用 Garry mod 从文件夹中 select 随机 .wav/.mp3 文件?

How to select random .wav/.mp3 file from folder with Garry's mod?

我最近开始编写一个程序来替换默认目录中的音效,在 Source-Engine 游戏,Garry 的 Mod.

这是当前代码:

function GM:PlayerFootstep( ply, pos, foot, sound, volume, rf ) 
     ply:EmitSound("gear1")
     return true 
 end

我想发出多个 .wav 音效,不重叠,随机选择。

我在 Internet 上找不到任何足够有用的资源来提供帮助,所以我求助于 Stack Overflow。 我将不胜感激有关该主题的帮助。

您需要为此查看 file.Find 函数。

我建议有一个自定义文件夹,例如 sound/customsteps/,您可以在其中放置所有自定义声音。我还建议对声音文件使用 .wav 格式,但其他一些格式确实有效(如果我没记错的话 .mp3.ogg)。

在您的代码中,只需调用 local snds=file.Find( "sound/customsteps/*", "GAME" ) 即可得到 table,然后您可以使用 local snd=snds[math.random(1,#snds)] 从列表中随机选择一个并像在你上面的代码 - ply:EmitSound(snd).

确保在 GM:PlayerFootstep 函数之外创建 table 声音,这样它只运行一次。我还建议预先缓存所有声音。您可以通过遍历 table 并对其调用 util.PrecacheSound(path) 来完成此操作,如下所示:

for k,v in pairs(snds) do
    util.PrecacheSound(v)
end

因此,考虑到所有这些 - 您的最终代码应如下所示:

local snds=file.Find( "sound/customsteps/*", "GAME" )
for k,v in pairs(snds) do
    util.PrecacheSound(v)
end

function GM:PlayerFootstep( ply, pos, foot, sound, volume, rf ) 
    ply:EmitSound(snds[math.random(1,#snds)])
    return true
end

来源:personal experience