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

Roblox脚本仅对首个加入玩家生效问题求助

问题分析与修复方案

问题根源

  • 服务器脚本使用player = game:GetService("Players").PlayerAdded:Wait(),这个方法仅会等待并返回第一个加入游戏的玩家,后续玩家加入时这段代码不会重新执行,导致values变量始终指向第一个玩家的Values对象。
  • 当后续玩家触发Proximity Prompt时,回调函数修改的还是第一个玩家的Total Price数值,当前触发玩家的数据根本没被更新,自然客户端GUI不会产生预期变化。

修复后的服务器端代码

替换原服务器脚本为以下代码:

local repStore = game.ReplicatedStorage
local remoteEvent = repStore["Remote Events"]:WaitForChild("avatarView")
local prox = script.Parent.viewAvatar

prox.Triggered:Connect(function(player)
    -- 从触发事件传入的player参数中获取对应玩家的Values对象
    local values = player:WaitForChild("Values")
    values["Total Price"].Value = "R15 MAN"
    remoteEvent:FireClient(player)
end)

代码修改说明

  1. 移除了PlayerAdded:Wait()和等待Character的逻辑,因为Proximity Prompt触发时,Roblox会自动将触发的玩家作为参数传入回调函数,无需提前监听玩家加入。
  2. 在回调内部通过player:WaitForChild("Values")获取当前触发玩家的Values对象,确保每次修改的都是对应玩家的数据。
  3. 保留了更新数值并发送RemoteEvent的核心逻辑,这部分原本是正确的。

客户端代码优化(可选)

原客户端代码功能正常,但可以去掉不必要的Character等待逻辑,并替换更高效的等待方法:

local player = game.Players.LocalPlayer
local repStore = game.ReplicatedStorage
local remoteEvent = repStore["Remote Events"]:WaitForChild("avatarView")
local shop = script.Parent.Main
local values = player:WaitForChild("Values")
local totalPrice = values["Total Price"]

remoteEvent.OnClientEvent:Connect(function()
    shop.Price.Text = totalPrice.Value
    task.wait(0.2) -- 用task.wait替代wait,性能更优
    shop.Visible = true
end)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:22:11