[当服务器说一切准备就绪时,我正在尝试使加载屏幕消失,但是我期望的那样,LocalScript中的事件侦听器没有触发。
在ReplicatedFirst的LocalScript中,我有这个:
print("Hello world - Local Script!", tick())
game.ReplicatedFirst.RemoteEvent.OnClientEvent:Connect(function()
print("ReplicatedFirst event signal received!", tick())
end)
并且在ServerScripts的脚本中,我有这个:
print("Hello world! - Server", tick())
while true do
print("Firing event from server...", tick())
game.ReplicatedFirst.RemoteEvent:FireAllClients()
wait(3.0)
end
在输出中,我得到这个:
Hello world! - Server 1585699530.2938
Firing event from server... 1585699530.2945
Hello world - Local Script! 1585699531.4771
Firing event from server... 1585699533.3019
Firing event from server... 1585699536.3193
Firing event from server... 1585699539.3349
Firing event from server... 1585699542.3354
每行“从服务器触发事件...”行之后,我都希望看到消息“收到ReplicatedFirst事件信号!(时间戳)”。
docs 推荐您使用的ReplicatedStorage:
为了使服务器和客户端都能利用远程事件,RemoteEvent对象本身必须位于双方都能看到的地方。因此,我们建议您将RemoteEvent存储在ReplicatedStorage内,尽管在某些情况下,最好将其存储在工作区或工具内。
但是我的假设是ReplicatedFirst是这些共享位置之一。不是这样吗? ReplicatedFirst不是共享位置吗?还是我做错了什么?
事实证明,ReplicatedFirst在客户端/服务器复制方面有一些奇怪的规则。应该考虑到ReplicatedFirst的内容由服务器拥有,并且当播放器加入时,内容将复制到新播放器。
但是由于每个播放器都有自己的内容副本,因此尝试连接到ReplicatedFirst中托管的RemoteEvents不会引发任何错误,但也不会成功。