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

使用RemoteEvent的FireClient时LocalScript遇WaitForChild索引布尔值错误求助

解决Roblox LocalScript中"attempt to index boolean with 'waitforchild'"错误

错误原因

你的LocalScript在OnClientEvent回调里错误声明了Player:Player参数。当服务器用:FireClient(targetPlayer)触发事件时,客户端的回调不会收到Player对象作为参数——LocalScript本身可以通过game.Players.LocalPlayer直接获取当前玩家。如果服务器没有额外传递参数,回调里的Player变量实际是无效值(比如布尔值或nil),导致你调用Player.PlayerGui:WaitForChild()时,试图对非玩家对象执行索引操作,触发报错。

修正后的代码

local player = game:GetService("Players").LocalPlayer
local ToggleTPMenuEvent = game.ReplicatedStorage.TeleportEvents.ToggleTPMenu

-- 用WaitForChild确保Gui加载完成后再获取,避免nil错误
local TPMenu = player.PlayerGui:WaitForChild("TeleportMenu"):WaitForChild("Frame")

ToggleTPMenuEvent.OnClientEvent:Connect(function()
    -- 复用已获取的TPMenu变量,简化代码
    TPMenu.Visible = true
    TPMenu:WaitForChild("TextLabel").Visible = true
    TPMenu:WaitForChild("PlayButton").Visible = true
    TPMenu:WaitForChild("ChaptersFrame").Visible = true
end)

关键修改点

  • 移除回调中的Player:Player参数:客户端无需从服务器接收Player对象,直接使用本地的player变量即可。
  • 优化Gui获取逻辑:使用:WaitForChild()替代直接索引,避免因Gui加载延迟导致的nil错误。
  • 复用TPMenu变量:减少重复调用WaitForChild,提升代码可读性和运行效率。

服务器端触发示例(参考)

确保服务器端正确调用:FireClient(),只需要传入目标玩家:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ToggleTPMenuEvent = ReplicatedStorage.TeleportEvents.ToggleTPMenu

-- 示例:当玩家加入后5秒触发菜单显示
game.Players.PlayerAdded:Connect(function(player)
    task.wait(5)
    ToggleTPMenuEvent:FireClient(player)
end)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:29:50