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
相关产品推荐
相关产品推荐

