Lua 为什么在尝试从roblox上的不同脚本检索BrickColor.Name零件时会得到不同的值
我正在用Roblox写一个简单的游戏 播放器中的一个脚本会更改播放器触摸到的所有灰色块的颜色。 部件中的其他脚本使其闪烁。当触摸该部件时,该部件应停止闪烁,然后颜色发生变化 当我触摸块时,渲染的颜色和播放器脚本中的颜色名称会发生变化,但零件脚本中的颜色名称不会发生变化。 我添加了一些指纹来帮助我弄清楚到底发生了什么。 我知道用一个事件来解决它是可能的。但为什么会有不同的价值观呢 此脚本位于StarterCharacterScripts对象中:Lua 为什么在尝试从roblox上的不同脚本检索BrickColor.Name零件时会得到不同的值,lua,roblox,Lua,Roblox,我正在用Roblox写一个简单的游戏 播放器中的一个脚本会更改播放器触摸到的所有灰色块的颜色。 部件中的其他脚本使其闪烁。当触摸该部件时,该部件应停止闪烁,然后颜色发生变化 当我触摸块时,渲染的颜色和播放器脚本中的颜色名称会发生变化,但零件脚本中的颜色名称不会发生变化。 我添加了一些指纹来帮助我弄清楚到底发生了什么。 我知道用一个事件来解决它是可能的。但为什么会有不同的价值观呢 此脚本位于StarterCharacterScripts对象中: print(":)") local origina
print(":)")
local originalColor = BrickColor.new(0.639216, 0.635294, 0.647059)
local player = game.Players.LocalPlayer
local human = player.Character.Humanoid
print("Player logged: " .. human.DisplayName)
human.Touched:Connect(function(hit,limb)
if hit.BrickColor.Name == originalColor.Name then
hit.Color = player.TeamColor.Color
end
end)
while true do
print("From human: " .. workspace.Test.BrickColor.Name)
wait(3)
end
另一个脚本位于对象中:
local greyPart=script.Parent
local myColor = greyPart.Color
print(greyPart.Name)
print(script.Parent.Name)
while myColor == script.Parent.Color do
greyPart.Transparency = 1
wait(1)
greyPart.Transparency = 0
wait(1)
print("From part: " .. workspace.Test.BrickColor.Name)
end
触摸前我得到的输出如下:
From human: Medium stone grey
From part: Medium stone grey (x2)
From human: Really red
From part: Medium stone grey (x2)
在触摸了这样的东西之后:
From human: Medium stone grey
From part: Medium stone grey (x2)
From human: Really red
From part: Medium stone grey (x2)
出于安全原因,使用LocalScript对工作区进行更改时,仅将这些更改应用于拥有LocalScript的播放机 如果您从Studio的测试选项卡玩游戏,并使用3名玩家和服务器运行游戏,您可以看到这一点。 我在StarterCharacterScripts中制作了一个简单的LocalScript,将砖块更改为随机颜色。这是它在所有不同客户端和服务器上的外观: 服务器: 玩家1: 玩家2: 玩家3:
如果要将更改复制到所有播放机,则必须在脚本中进行更改。出于安全原因,使用LocalScript对工作区进行更改时,仅将这些更改应用于拥有LocalScript的播放机 如果您从Studio的测试选项卡玩游戏,并使用3名玩家和服务器运行游戏,您可以看到这一点。 我在StarterCharacterScripts中制作了一个简单的LocalScript,将砖块更改为随机颜色。这是它在所有不同客户端和服务器上的外观: 服务器: 玩家1: 玩家2: 玩家3: 如果您希望将更改复制到所有玩家,则必须在脚本中进行 我知道用一个事件来解决它是可能的。但为什么会有不同的价值观呢 使用
RemoteEvent
是此问题的解决方案,因为您正试图从客户端进行服务器端更改。在Roblox客户机-服务器模型中,服务器是权威的,并且是唯一可以对游戏世界中的对象进行更改的服务器。当一个客户改变了您使用脚本的方式时,从本地客户的角度来看,这种改变是可见的;然而,这一变化并没有复制到其他参与者身上。这解释了脚本的输出:在屏幕上,块的BrickColor
已更改,但从其他玩家的角度来看,它仍然是灰色的
RemoteEvent
,以及RemoteFunction
,可以从客户端发送信号,然后由服务器接收;这些信号可以告诉服务器改变游戏世界,所有客户端都可以看到。在您的情况下,客户端脚本会检测玩家触摸的灰色部分,它会通过RemoteEvent
将该信息发送到服务器,并告诉服务器更改该部分的BrickColor
RemoteEvent
类的Roblox参考页说明如下:
RemoteEvent
用于在服务器和客户端之间提供单向消息,允许Scripts
在LocalScripts
中调用代码,反之亦然。此消息可以从一个客户端定向到服务器,从服务器定向到特定客户端,或从服务器定向到所有客户端
在您的情况下,您可以将消息从一个客户端定向到服务器,从LocalScript
调用服务器端Script
中包含的函数
有关示例和更多详细信息,请参见RemoteEvent
参考页
我知道用一个事件来解决它是可能的。但为什么会有不同的价值观呢
使用RemoteEvent
是此问题的解决方案,因为您正试图从客户端进行服务器端更改。在Roblox客户机-服务器模型中,服务器是权威的,并且是唯一可以对游戏世界中的对象进行更改的服务器。当一个客户改变了您使用脚本的方式时,从本地客户的角度来看,这种改变是可见的;然而,这一变化并没有复制到其他参与者身上。这解释了脚本的输出:在屏幕上,块的BrickColor
已更改,但从其他玩家的角度来看,它仍然是灰色的
RemoteEvent
,以及RemoteFunction
,可以从客户端发送信号,然后由服务器接收;这些信号可以告诉服务器改变游戏世界,所有客户端都可以看到。在您的情况下,客户端脚本会检测玩家触摸的灰色部分,它会通过RemoteEvent
将该信息发送到服务器,并告诉服务器更改该部分的BrickColor
RemoteEvent
类的Roblox参考页说明如下:
RemoteEvent
用于在服务器和客户端之间提供单向消息,允许Scripts
在LocalScripts
中调用代码,反之亦然。此消息可以从一个客户端定向到服务器,从服务器定向到特定客户端,或从服务器定向到所有客户端
在您的情况下,您可以将消息从一个客户端定向到服务器,从LocalScript
调用服务器端Script
中包含的函数
有关详细信息,请参阅RemoteEvent
参考页