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

如何让GLua中的ENT:Touch仅检测特定实体的触碰

解决GLua中ENT:Touch仅检测特定实体的问题

ENT:Touch的参数是固定的,就是触发触碰的实体,不能随意修改参数。要实现仅检测特定实体,必须在函数内添加有效性判断+类型/类名判断,以下是正确的实现方式:

情况1:仅响应玩家实体的触碰

function ENT:Touch(entity)
    -- 先判断实体是否有效,再判断是否为玩家
    if not IsValid(entity) or not entity:IsPlayer() then
        return -- 不是目标实体,直接退出函数
    end

    EmitSound(Sound("buttons/lightswitch2.wav"), self:GetPos(), 1, CHAN_AUTO, 1, 75, 0, 100)
    self:Remove()
end

情况2:仅响应特定类名的实体

比如要检测prop_physics类的实体,或者你自定义的实体类:

function ENT:Touch(entity)
    -- 第一步必须检查实体有效性,避免访问已销毁的实体导致逻辑中断
    if not IsValid(entity) then
        return
    end

    -- 替换成你需要检测的实体类名
    local targetClass = "prop_physics"
    if entity:GetClass() ~= targetClass then
        return
    end

    EmitSound(Sound("buttons/lightswitch2.wav"), self:GetPos(), 1, CHAN_AUTO, 1, 75, 0, 100)
    self:Remove()
end

常见问题排查

  • 不要修改ENT:Touch的参数列表,它的参数固定为触碰过来的实体,改参数会导致函数无法被引擎正确调用
  • 必须先执行IsValid(entity)判断,否则触碰已销毁的实体时,后续代码会报错,导致整个逻辑失效
  • 检查目标实体的类名拼写是否正确,自定义实体的类名要和注册时一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:49:54