Roblox-几种Script在不同工作区下的执行情况


1.ReplicatedStorage下的脚本

在ReplicatedStorage下分别创建Script、LocalScript和MoudleScript,在里面分别写入如下的print指令,运行游戏后发现三种脚本都不执行。

1
print("这是一个创建在ReplicatedStorage下的Script")
1
print("这是一个创建在ReplicatedStorage下的LocalScript")
1
2
3
local TestScript = {}
print("这是一个创建在ReplicatedStorage下的ModuleScript")
return TestScript

随后在脚本中改变三种脚本的父级到WorkSpace进行测试。运行后发现脚本存在的位置根本没有变化,因为压根没调用脚本…

image-20230511192413791

不过无论在客户端还是服务端都能在ReplicatedStorage那里看到这三种脚本。它根本不执行,所以也不用测试转移到其他工作区下了。

2.Workspace下的脚本

1.转移到ReplicatedStorage下

把之前的三个文件拖入Workspace下进行测试,创建一个Script文件夹,同时注释之前脚本中关于改变父级的内容。运行游戏

image-20230511192924906

可以看到,虽然三个脚本都在workspace下,但是只有Script执行了,LocalScript和ModuleScript都没有执行。

此时加入脚本文件父级的内容,将脚本的父级设为ReplicatedStorage,再次进行测试:

1
2
3
WorkSpace=game:GetService("ReplicatedStorage")
script.Parent = WorkSpace
print("这是一个创建在Workspace下的LocalScript")

image-20230511193256324

可以看到运行后仍旧只有Script运行了,同时Script脚本转移到了ReplicatedStorage下,本地脚本和模块脚本都没有运行并保留在Workspace下。

2.转移到ServerScriptService下

改变三个脚本的父级关系如下

1
2
3
print("这是一个创建在Workspace下的Script")
WorkSpace=game:GetService("ServerScriptService")
script.Parent = WorkSpace

结果依旧

image-20230511193946365

但是这里注意到一件事,脚本转移到ServerScriptService是只发生在服务端上的,在服务端可以看到TestScript转移到了ServerScriptService下,而在客户端上,看到的事情就是TestScript脚本消失了。

image-20230511194144252

3.转移到StarterPlayer下

改变三个脚本父级如下:

1
2
3
print("这是一个创建在Workspace下的Script")
WorkSpace=game:GetService("StarterPlayer")
script.Parent = WorkSpace

结果同上 不再赘述

image-20230511195731040

3.ServerScriptService下的脚本

1.转移到Workspace下

1
2
3
print("这是一个创建在ServerScriptService下的Script")
WorkSpace=game:GetService("Workspace")
script.Parent = WorkSpace

结果还是只有Script执行并跑到了WorkSpace下,但与此同时,在客户端上也能看到转移过去的TestScript文件。

image-20230511200252818

2.转移到ReplicatedStorage下

1
2
3
print("这是一个创建在ServerScriptService下的Script")
WorkSpace=game:GetService("ReplicatedStorage")
script.Parent = WorkSpace

还是只有Script一个脚本执行了,然后转移到了ReplicatedStorage下,同时客户端看不到ServerScriptService中的内容。

image-20230511200744577

然后服务端可以看到

![image-20230511200918892](Roblox-几种Script在不同工作区下的执行情况/image-20230511200918892.png)

3.转移到StarterPlayer下

1
2
3
print("这是一个创建在ServerScriptService下的Script")
WorkSpace=game:GetService("StarterPlayer")
script.Parent = WorkSpace

同上,没啥变化

image-20230511201611341

可以看出ServerScriptService下的变换父级是移动而不是复制

4.StarterPlayer下的脚本

挂靠在StarterPlayer下的StarterCharacterScripts下

1.转移到ReplicatedStorage下

1
2
3
print("这是一个创建在StarterPlayer下的Script")
WorkSpace=game:GetService("ReplicatedStorage")
script.Parent = WorkSpace

这里出现了“Something unexpectedly tried to set the parent of TestLocalScript to ReplicatedStorage while trying to set the parent of TestLocalScript. Current parent is Script.”暂时不知道是什么情况

image-20230511202358741

然后LocalScript在客户端执行,文件结构上,无论是客户端还是服务端,Script脚本都复制到了ReplicatedStorage下。

image-20230511203109940

2.转移到Workspace下

1
2
3
print("这是一个创建在StarterPlayer下的Script")
WorkSpace=game:GetService("Workspace")
script.Parent = WorkSpace

同样出现了 Something unexpectedly tried to set the parent of TestLocalScript to Workspace while trying to set the parent of TestLocalScript. Current parent is Script.

image-20230511203225237

3.转移到ServerScriptService下

1
2
3
print("这是一个创建在StarterPlayer下的Script")
WorkSpace=game:GetService("ServerScriptService")
script.Parent = WorkSpace

在服务端上,Script转移到了ServerScriptService下,而LocalScript脚本在客户端执行了,一看LocalScript在哪吓一跳

image-20230511203458269

LocalScript无论是客户端还是服务端都复制了一份到Workspace下的角色的Script下,突然想起来StarterPlayer下的脚本在游戏开始后就会复制一份到角色下,这里我才发现。而且可以看出来LocalScript和MoudleScript发生了复制,Script并没有

image-20230511203743496

StarterPlayer的文件进行转移是复制,本身会再保留一份。


文章作者: John Doe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 John Doe !
  目录