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

Roblox Lua如何编写if语句检测非GUI的3D部件被点击?

Roblox 非GUI 3D部件点击检测实现方案

前置操作

  • 给Workspace下的PizzaButton、FriesButton、BurgerButton三个3D部件分别插入ClickDetector实例(Roblox Studio中右键对应部件→插入对象→选择ClickDetector即可),该组件是Roblox官方提供的用于检测3D部件点击的标准组件。

实现逻辑说明

你原来的代码中想直接写同步if判断点击状态是不可行的,用户点击3D部件属于异步事件,需要通过事件监听的方式实现触发逻辑。

修改后完整代码

local chat = game.Workspace.Dummy1.Head.Dialog
local Menu = {"pizza","fries","hamburger"}

local Item = math.random(1,#Menu)  -- 从表中随机选择食物
chat.InitialPrompt = Menu[Item] -- 显示随机选中的食物

-- 定义按钮变量
local PizzaButton = game.Workspace.PizzaButton
local FriesButton = game.Workspace.FriesButton
local BurgerButton = game.Workspace.BurgerButton

if chat.InitialPrompt == "pizza" then
    print("Pizza has been chosen")
    -- 监听披萨按钮点击
    local pizzaClickConn
    pizzaClickConn = PizzaButton.ClickDetector.MouseClick:Connect(function(clickPlayer)
        print(clickPlayer.Name .. "点击了披萨按钮,选择正确")
        -- 此处添加选择正确后的业务逻辑,比如加分、切换下一轮等
        pizzaClickConn:Disconnect() -- 解绑事件,避免单次流程被多次触发
    end)
elseif chat.InitialPrompt == "fries" then
    print("Fries has been chosen")
    -- 监听薯条按钮点击
    local friesClickConn
    friesClickConn = FriesButton.ClickDetector.MouseClick:Connect(function(clickPlayer)
        print(clickPlayer.Name .. "点击了薯条按钮,选择正确")
        -- 此处添加选择正确后的业务逻辑
        friesClickConn:Disconnect()
    end)
elseif chat.InitialPrompt == "hamburger" then
    print("Burger has been chosen")
    -- 监听汉堡按钮点击
    local burgerClickConn
    burgerClickConn = BurgerButton.ClickDetector.MouseClick:Connect(function(clickPlayer)
        print(clickPlayer.Name .. "点击了汉堡按钮,选择正确")
        -- 此处添加选择正确后的业务逻辑
        burgerClickConn:Disconnect()
    end)
else
    print("Error")
end

扩展说明

如果需要实现选错提示的逻辑,可以在对应分支同时监听另外两个非正确按钮的点击事件,触发时打印错误提示并解绑所有监听即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:57:02