1.ReplicatedStorage下的脚本
在ReplicatedStorage下分别创建Script、LocalScript和MoudleScript,在里面分别写入如下的print指令,运行游戏后发现三种脚本都不执行。
1 | print("这是一个创建在ReplicatedStorage下的Script") |
1 | print("这是一个创建在ReplicatedStorage下的LocalScript") |
1 | local TestScript = {} |
随后在脚本中改变三种脚本的父级到WorkSpace进行测试。运行后发现脚本存在的位置根本没有变化,因为压根没调用脚本…

不过无论在客户端还是服务端都能在ReplicatedStorage那里看到这三种脚本。它根本不执行,所以也不用测试转移到其他工作区下了。
2.Workspace下的脚本
1.转移到ReplicatedStorage下
把之前的三个文件拖入Workspace下进行测试,创建一个Script文件夹,同时注释之前脚本中关于改变父级的内容。运行游戏

可以看到,虽然三个脚本都在workspace下,但是只有Script执行了,LocalScript和ModuleScript都没有执行。
此时加入脚本文件父级的内容,将脚本的父级设为ReplicatedStorage,再次进行测试:
1 | WorkSpace=game:GetService("ReplicatedStorage") |

可以看到运行后仍旧只有Script运行了,同时Script脚本转移到了ReplicatedStorage下,本地脚本和模块脚本都没有运行并保留在Workspace下。
2.转移到ServerScriptService下
改变三个脚本的父级关系如下
1 | print("这是一个创建在Workspace下的Script") |
结果依旧

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

3.转移到StarterPlayer下
改变三个脚本父级如下:
1 | print("这是一个创建在Workspace下的Script") |
结果同上 不再赘述

3.ServerScriptService下的脚本
1.转移到Workspace下
1 | print("这是一个创建在ServerScriptService下的Script") |
结果还是只有Script执行并跑到了WorkSpace下,但与此同时,在客户端上也能看到转移过去的TestScript文件。

2.转移到ReplicatedStorage下
1 | print("这是一个创建在ServerScriptService下的Script") |
还是只有Script一个脚本执行了,然后转移到了ReplicatedStorage下,同时客户端看不到ServerScriptService中的内容。

然后服务端可以看到

3.转移到StarterPlayer下
1 | print("这是一个创建在ServerScriptService下的Script") |
同上,没啥变化

可以看出ServerScriptService下的变换父级是移动而不是复制
4.StarterPlayer下的脚本
挂靠在StarterPlayer下的StarterCharacterScripts下
1.转移到ReplicatedStorage下
1 | print("这是一个创建在StarterPlayer下的Script") |
这里出现了“Something unexpectedly tried to set the parent of TestLocalScript to ReplicatedStorage while trying to set the parent of TestLocalScript. Current parent is Script.”暂时不知道是什么情况

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

2.转移到Workspace下
1 | print("这是一个创建在StarterPlayer下的Script") |
同样出现了 Something unexpectedly tried to set the parent of TestLocalScript to Workspace while trying to set the parent of TestLocalScript. Current parent is Script.

3.转移到ServerScriptService下
1 | print("这是一个创建在StarterPlayer下的Script") |
在服务端上,Script转移到了ServerScriptService下,而LocalScript脚本在客户端执行了,一看LocalScript在哪吓一跳

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

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