(Roblox Studio)客户端-服务器-客户端通信不起作用

问题描述 投票:0回答:2

我正在尝试通过服务器端的脚本使用 RemoteEvent 将数据从一个 LocalScript 发送到另一个 LocalScript。第一个 LocalScript 在 StarterCharacterScripts 中,服务器端脚本在工作场所,第二个 LocalScript 在玩家的角色模型下。

我在每个函数中设置了打印语句,以查看通信在哪里停止,当服务器在第二个 LocalScript 处重新触发函数时,通信似乎停止了。但是,我无法确定造成这种情况的原因。

第一个 LocalScript (StarterCharacterScripts)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local createPartEvent = ReplicatedStorage:WaitForChild("CreatePartEvent")
local UserInputService=game:GetService("UserInputService")
local player=game.Players.LocalPlayer
UserInputService.InputBegan:Connect(function(input,gameProcessed)
    if input.KeyCode==Enum.KeyCode.G then
        createPartEvent:FireServer(251,226,11)
        print("Bing!")
    end
end)

服务器端脚本(工作场所)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local createPartEvent = Instance.new("RemoteEvent", ReplicatedStorage)
createPartEvent.Name = "CreatePartEvent"
local fadePartEvent = Instance.new("RemoteEvent")
fadePartEvent.Parent=game.ReplicatedStorage
fadePartEvent.Name="FadePartEvent"

local function onCreatePartFired(player,red,green,blue)
    print("Ting!" ,player,red,green,blue)
    fadePartEvent:FireClient(player,red,green,blue)
end

createPartEvent.OnServerEvent:Connect(onCreatePartFired)

第二个LocalScript(玩家模型)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player=game.LocalPlayer
local fadePartEvent=ReplicatedStorage:WaitForChild("FadePartEvent")
fadePartEvent.Name="FadePartEvent"
local function onFadePartFired(player,red,green,blue)
    print("Done!")
        print(player,red,green,blue)
end

fadePartEvent.OnClientEvent:Connect(onFadePartFired)

如果代码运行正常,输出应该是:

Bing!
Ting! BusterTornado 251 226 11
Done! BusterTornado 251 226 11

但是,输出显示为:

Bing! 
Ting! BusterTornado 251 226 11

这表明该函数未到达第二个 LocalScript。我尝试四处寻找,但到目前为止还没有找到任何答案。

lua roblox
2个回答
0
投票

您只需使用BindableEvent,它就可以在[服务器端到服务器端]或[客户端到客户端]之间发送数据。 使用 :Fire 在发送数据的 localscript 上并在第二个 localscript 中输入 .Event


0
投票

好吧,Bindable 事件是一种好方法,但如果您仍然想使用 Client1->Server->Client2 方法,那么这是我的方法。

服务器端脚本(工作场所)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local createPartEvent = Instance.new("RemoteEvent", ReplicatedStorage)
createPartEvent.Name = "CreatePartEvent"
local fadePartEvent = Instance.new("RemoteEvent")
fadePartEvent.Parent=game.ReplicatedStorage
fadePartEvent.Name="FadePartEvent"

local function onCreatePartFired(player,red,green,blue)
    print("Ting!" ,player,red,green,blue)
    fadePartEvent:FireAllClients(player,red,green,blue) -- somehow this sends all the info
end

createPartEvent.OnServerEvent:Connect(onCreatePartFired)

第二个LocalScript(玩家模型)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Player= game.Players.LocalPlayer
local fadePartEvent=ReplicatedStorage:WaitForChild("FadePartEvent")
fadePartEvent.Name="FadePartEvent"
local function onFadePartFired(player,red,green,blue)
    if Player.UserId == player.UserId then -- check if You are the one who supposed to receive the info
        print("Done!")
        print(player,red,green,blue)
    end
end

fadePartEvent.OnClientEvent:Connect(onFadePartFired)
© www.soinside.com 2019 - 2024. All rights reserved.