如何使用 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
我最近开始编写一个程序来替换默认目录中的音效,在 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