我试图通过监视脚本的所有子部分来让“叶子”在 Roblox 游戏中产生沙沙声

Posted

技术标签:

【中文标题】我试图通过监视脚本的所有子部分来让“叶子”在 Roblox 游戏中产生沙沙声【英文标题】:I'm trying to get "leaves" to produce a rustling noise in a Roblox game by monitoring all child parts of the script 【发布时间】:2021-12-13 04:21:59 【问题描述】:

使用@Kylaaa 在another question 中帮助我完成的儿童监控脚本,我花了几个小时在这方面,将核心功能从治疗和消失砖块更改为在玩家“穿过树叶”时播放父母声音.我一直在研究问题的各个方面('IsA'、'TouchInterest'、'If...then'、类、运算符等),并做了各种事情,例如更改我的脚本以查看名称触摸对象而不是它们的类,但我没有运气播放声音。

-- create a helper function to access the brick and the thing that touched it
function OnTouched(thing)
    local active = false --start with this debounce variable off so that the function will run the first time
    return function(target) --provides actual target of the event
        if active then return end       -- do not do the animation again if it has already started
        local player=thing.Parent:findFirstChild("Humanoid") --determine if it's humanoid
        if player then --if it is, then
            active = true --toggle to prevent function from running again simultaneously
            script.Parent:play() --play rustling leaves sound
            wait(1)
            active = false -- reset so function can be used again
        end --end of if statement
    end
end

-- loop over the children and connect touch events
local bricks = script:GetChildren()
for i, brick in ipairs(bricks) do
    if brick:IsA("Part") then
        local onTouchedFunc = OnTouched(brick)
        brick.Touched:Connect(onTouchedFunc)
    end
end

这是我想要添加沙沙声的落叶照片。左边的藤蔓也有同样的问题。

葡萄藤:

所有叶子都是'MeshParts',里面有'SurfaceAppearance',并且是Anchored和CanTouch,但不是CanCollide。我尝试打开 CanCollide 但没有帮助。

密叶补丁属性:

表面外观属性:

我试过“如果砖:IsA(“模型”或“MeshPart”)那么“ 和 "如果brick.Name=="Dense Leaf patch" or "SurfaceAppearance" or "DenseLeafPatch" then" 但这些都不起作用。

然后我注意到 Roblox 没有生成 TouchInterest,并且我了解到您既不能复制也不能复制 TouchInterest 以在需要它们的地方使用(根据 DevForum 中的消息,它们不适合开发人员使用) .

我最初在单独的“模型”中有 1-3 个叶子“MeshPart”,但后来制作了一个单独的、不可见的部分(名称:TouchInterest),CanTouch 不是 CanCollide,它大到足以覆盖实例的几乎所有物理区域, 并将所有 MeshParts 放入该部分。然后,我将脚本更改为只查找“零件”。因此,在运行时会生成一个 TouchInterest。

这是“叶子”组中涉及的所有内容,先是声音,然后是脚本,包含部分,然后是作为脚本子级的所有叶子。

声音的属性:

输出中没有这方面的错误。

我觉得有些简单的东西我不明白。我需要几个小部分(而不是一个大的)包含一组叶子吗?请帮忙!

【问题讨论】:

您说过声音无法播放,但您是否尝试过添加断点或print 语句来单步执行代码?当您触摸任何叶子或 TouchInterest 部分时,brick.Touched 事件是否正确触发?代码是否到达对script.Parent:Play() 的调用?如果您在播放时检查资源管理器中的声音,您能看到它正在播放吗?您的计算机和 Roblox Studio 中的音量是否已调高? 我不明白你所说的断点是什么意思,抱歉。我会尝试打印语句,让你知道会发生什么。 声音的音量为10,我设置为“播放”,游戏加载时可以听到。我在第 6 行发现一个错误,我使用 thing 而不是 target,所以我修复了它。我到处打印,可以看到脚本正在运行。第一次在“播放”打开时触发,它实际上播放了声音,但没有再次播放。打印输出显示,在那之后,触发了返回函数(跳过 :play() 之后的所有内容),然后它在发现去抖动打开和触发返回函数之间循环。等待打印未触发。 @Kylaaa 所以,实际上,wait(1) DID 触发了......在我停止移动之后,它关闭了去抖动并退出了。有没有搞错?评论框的输出太多了,我无法添加图像......我回去了,它是不同的,因为我删除了等待语句。现在它会忽略去抖并在我每次移动时触发,听起来就像一场灾难。 然后,如果我停止移动,然后再次移动,声音开始播放之前会有一段延迟。 【参考方案1】:

我发现了问题。

    在第 6 行,我在本应使用“target”时使用了“thing”。 在第 9 行,我忘记将“Play”大写。 在第 10 行,我需要等待 2 秒而不是 1 秒。

【讨论】:

与其等待2秒,值得等待length of the soundwait(script.Parent.TimeLength) 我不知道。虽然上次我写的时候它工作得很好,但它不再工作了,这很大程度上是因为昨晚开始的几乎全部系统范围的中断。 R 应用程序无法连接,我无法访问我们正在进行的在线游戏(关于 GUAC 政策和 UniversalAppConfiguration 的错误,我无法发布,载有病毒的工具箱已关闭,NPC 丢失或不完整,网格、模型、声音等无法加载,依此类推...你比我更清楚 Roblox 现在的情况!祝你好运!

以上是关于我试图通过监视脚本的所有子部分来让“叶子”在 Roblox 游戏中产生沙沙声的主要内容,如果未能解决你的问题,请参考以下文章

bzoj3252: 攻略

显示子部分时在父 div 上使用过渡展开

使用 Cocoon 在 link_to_add_association 点击​​时自动添加嵌套的子部分

php 怎么获取一个部门下的子部门 子部门下的部门 一直下去找到所有部门

linux - 监视目录中的新文件,然后运行脚本

Laravel mix / webpack 不会在通过 babel() 编译的脚本上触发监视功能