为什么在 Roblox 中从不同的脚本中检索部件的 BrickColor.Name 时会得到不同的值
我在 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)
使用RemoteEvent是解决这个问题的方法,因为您正在尝试从客户端影响服务器端的更改。在Roblox的客户端-服务器模型中,服务器是权威性的,并且只有它可以更改游戏世界中的对象。当客户端以您的脚本所做的方式进行更改时,该更改从本地客户端的角度可见;但是,该更改不会复制到其他玩家。这解释了您的脚本输出:在您的屏幕上,该块的BrickColor已更改,但从另一个玩家的角度来看,它仍然是灰色的。
RemoteEvent以及RemoteFunction可以从客户端发送信号,接收到信号的服务器则可以将其发送到所有客户端,从而通知它们要更改游戏世界。在您的情况下,您检测玩家接触哪些灰色零件的客户端脚本将通过RemoteEvent向服务器发送该信息,并告诉服务器更改零件的BrickColor。
Roblox的RemoteEvent类参考页面如下所示:
RemoteEvent旨在在服务器和客户端之间提供单向消息,允许Scripts在LocalScripts中调用代码,反之亦然。此消息可以从一个客户端传递到服务器,从服务器传递到特定客户端,或从服务器传递到所有客户端。
在您的情况下,您将从一个客户端向服务器发送一个消息,从LocalScript调用包含在服务器端Script中的函数。
请参阅此处的RemoteEvent参考页面(https://developer.roblox.com/en-us/api-reference/class/RemoteEvent)以获取示例和更多详细信息。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

出于安全原因,使用 LocalScripts 对 Workspace 进行更改只会应用于拥有 LocalScript 的玩家。
如果您从 Studio 的 Test 标签中播放该游戏并在服务器上运行 3 个玩家,则可以看到此操作(这是一个示例)。 我在 StarterCharacterScripts 中制作了一个简单的 LocalScript,将砖块更改为随机颜色。这是在所有不同客户端和服务器上的外观:
服务器:
玩家 1:
玩家 2:
玩家 3:
如果您希望更改在所有玩家中复制,则必须在脚本中进行更改。