You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何断开模块脚本中绑定的指定RunService.Stepped事件连接?

问题原因

你当前的模块代码每次调用coolfunc时,RunService.Stepped:Connect()返回的连接对象没有被存储,无法定位到某一次调用生成的具体连接,自然没法单独断开。要实现指定断开单个连接,核心是把每次生成的RBXScriptConnection对象做可追踪的存储,有两种常用实现方案。

方案1:直接返回连接对象给调用方

这是最灵活的写法,不需要模块额外维护连接表,调用时直接拿到本次生成的连接,想断开哪个就操作对应的连接对象即可。
修改后的模块代码:

local RunService = game:GetService("RunService")

return {
  coolfunc = function(object)
    local currentConnection = RunService.Stepped:Connect(function()
      print(object)
    end)
    -- 将本次创建的连接返回给调用方
    return currentConnection
  end
}

调用示例:

local MyModule = require(脚本模块路径)

-- 多次调用时分别存储每次返回的连接
local connA = MyModule.coolfunc("第一个测试对象")
local connB = MyModule.coolfunc("第二个测试对象")

task.wait(2)
-- 仅断开第一个连接,第二个连接对应的逻辑会继续运行
connA:Disconnect()
方案2:模块内部维护连接映射表

如果你的连接是和传入的object一一对应的,可以在模块内部用表存储所有连接,额外提供断开指定连接的方法,不需要调用方自行保管连接对象。
修改后的模块代码:

local RunService = game:GetService("RunService")
local connectionCache = {} -- 内部存储所有生成的连接

return {
  coolfunc = function(object)
    -- 若该对象已有对应连接,先断开旧连接避免重复注册
    if connectionCache[object] then
      connectionCache[object]:Disconnect()
    end
    -- 存储新创建的连接
    connectionCache[object] = RunService.Stepped:Connect(function()
      print(object)
    end)
  end,
  -- 断开指定对象对应的连接
  disconnect = function(object)
    local targetConn = connectionCache[object]
    if targetConn then
      targetConn:Disconnect()
      connectionCache[object] = nil -- 清空引用避免内存泄漏
    end
  end,
  -- 可选:断开所有由本模块创建的Stepped连接
  disconnectAll = function()
    for _, conn in connectionCache do
      conn:Disconnect()
    end
    table.clear(connectionCache)
  end
}

调用示例:

local MyModule = require(脚本模块路径)

MyModule.coolfunc("对象A")
MyModule.coolfunc("对象B")

task.wait(2)
-- 仅断开对象A对应的连接
MyModule.disconnect("对象A")

注意:Roblox中所有事件的:Connect()调用都会返回一个连接对象,不再使用的连接一定要手动调用:Disconnect()断开,否则会持续占用资源造成内存泄漏。

内容的提问来源于stack exchange,提问作者OgGhostJelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:03:19