Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 为什么在尝试从roblox上的不同脚本检索BrickColor.Name零件时会得到不同的值_Lua_Roblox - Fatal编程技术网

Lua 为什么在尝试从roblox上的不同脚本检索BrickColor.Name零件时会得到不同的值

Lua 为什么在尝试从roblox上的不同脚本检索BrickColor.Name零件时会得到不同的值,lua,roblox,Lua,Roblox,我正在用Roblox写一个简单的游戏 播放器中的一个脚本会更改播放器触摸到的所有灰色块的颜色。 部件中的其他脚本使其闪烁。当触摸该部件时,该部件应停止闪烁,然后颜色发生变化 当我触摸块时,渲染的颜色和播放器脚本中的颜色名称会发生变化,但零件脚本中的颜色名称不会发生变化。 我添加了一些指纹来帮助我弄清楚到底发生了什么。 我知道用一个事件来解决它是可能的。但为什么会有不同的价值观呢 此脚本位于StarterCharacterScripts对象中: print(":)") local origina

我正在用Roblox写一个简单的游戏

播放器中的一个脚本会更改播放器触摸到的所有灰色块的颜色。 部件中的其他脚本使其闪烁。当触摸该部件时,该部件应停止闪烁,然后颜色发生变化

当我触摸块时,渲染的颜色和播放器脚本中的颜色名称会发生变化,但零件脚本中的颜色名称不会发生变化。 我添加了一些指纹来帮助我弄清楚到底发生了什么。 我知道用一个事件来解决它是可能的。但为什么会有不同的价值观呢

此脚本位于StarterCharacterScripts对象中:

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
参考页