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

Roblox Lua开发求助:如何为Instance.new生成的Kill Brick绑定Touched事件

Lua(Roblox):为动态创建的Kill Brick绑定Touched击杀事件

我正在学习Lua,尝试制作一个Roblox GUI:点击按钮后会在玩家头顶生成名为Kill Brick的砖块,当玩家触碰该砖块时会被击杀,但不知道如何为通过Instance.new创建的部件绑定Touched事件。以下是我目前的代码:

local button = script.Parent
local function kill()
    button.BackgroundColor3 = Color3.fromRGB(255, 0, 4)
    button.parent.BackgroundColor3 = Color3.fromRGB(255, 0, 4)
    local player = game.Players.LocalPlayer.character
    local killBrick = Instance.new("Part")
    killBrick.Name = "Kill Brick"
    killBrick.CFrame = player.Head.CFrame*CFrame.new(0,10,0)
    killBrick.Parent = game.Workspace
    killBrick.Color = Color3.fromRGB(255, 0, 0)
    killBrick.Material = "Neon"
    killBrick.BottomSurface = "Smooth"
    killBrick.TopSurface = "Studs"
    button.BackgroundColor3 = Color3.fromRGB(80, 80, 255)
    button.parent.BackgroundColor3 = Color3.fromRGB(106, 146, 255)
end
button.MouseButton1Click:Connect(kill)

修改后的完整代码(添加Touched事件绑定)

local button = script.Parent
local Players = game:GetService("Players")

local function onKillBrickTouched(hit)
    -- 检测触碰对象是否为玩家角色部件
    local humanoid = hit.Parent:FindFirstChildOfClass("Humanoid")
    if humanoid then
        local player = Players:GetPlayerFromCharacter(hit.Parent)
        if player then
            -- 击杀玩家(重置角色)
            humanoid.Health = 0
        end
    end
end

local function kill()
    -- 修复parent大小写错误(Roblox API区分大小写)
    button.BackgroundColor3 = Color3.fromRGB(255, 0, 4)
    button.Parent.BackgroundColor3 = Color3.fromRGB(255, 0, 4)
    
    local localPlayer = Players.LocalPlayer
    -- 确保角色已加载完成
    local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
    local head = character:WaitForChild("Head")
    
    local killBrick = Instance.new("Part")
    killBrick.Name = "Kill Brick"
    killBrick.CFrame = head.CFrame * CFrame.new(0, 10, 0)
    killBrick.Parent = workspace
    killBrick.Color = Color3.fromRGB(255, 0, 0)
    killBrick.Material = Enum.Material.Neon -- 使用枚举更规范
    killBrick.BottomSurface = Enum.SurfaceType.Smooth
    killBrick.TopSurface = Enum.SurfaceType.Studs
    killBrick.CanCollide = true -- 确保砖块可被触碰
    
    -- 为动态创建的砖块绑定Touched事件
    killBrick.Touched:Connect(onKillBrickTouched)
    
    button.BackgroundColor3 = Color3.fromRGB(80, 80, 255)
    button.Parent.BackgroundColor3 = Color3.fromRGB(106, 146, 255)
end

button.MouseButton1Click:Connect(kill)

关键说明

  • 绑定Touched事件:创建killBrick后,直接通过killBrick.Touched:Connect(事件处理函数)绑定,逻辑和按钮点击事件绑定一致。
  • 触碰检测逻辑:在事件处理函数中,先判断触碰部件是否属于带Humanoid的角色,再通过Players:GetPlayerFromCharacter确认是玩家,最后设置Humanoid.Health = 0实现击杀。
  • 原代码修复点:
    • 修正button.parent的大小写错误(Roblox API区分大小写,应为button.Parent)
    • 添加角色加载等待逻辑,避免character为nil的报错
    • 用枚举类型替代字符串参数,符合Roblox开发规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:20:47