迷你世界Studio为小伙伴们提供了多种脚本类型,它们应用于不同的应用场景以便于小伙伴们更方便也更优质的实现不同的功能,那么这些脚本都有什么类型以及功能呢,让我们一起来学习吧
脚本名称 |
含义 |
Script |
脚本 |
LocalScript |
局部脚本 |
ModuleScript |
模块脚本 |
CustomScript |
自定义脚本 |
RemoteEvent |
远程事件脚本 |
RemoteFunction |
远程功能脚本 |
Script
Script是一个 Lua 代码容器,可以访问服务器端对象、属性和事件,例如向玩家授予徽章,而客户端上的 LocalScript 则不能。
一旦满足以下条件,脚本代码就会在新线程中运行:
其 Enabled 属性为 true。 Script 对象是 Workspace 或 ServerScriptService 的后代。 该脚本将继续运行,直到不满足上述条件、终止或引发错误(除非该错误是由连接到正在触发的某个事件的函数引发的)。 此外,如果脚本或其祖先之一被破坏,线程将停止。 即使 Parent 属性设置为 nil,脚本也将继续运行,并且脚本不会被销毁。
-- 某个挂载在UIButton下的子脚本如何获取父类
(UIButton)local button = script.Parent
button.Click:Connect(function(node,issuccess,mousepos)
print('you Clickme')
print('Clickme pos:'..mousepos.x..' '..mousepos.y)
end)
LocalScript
LocalScript是用于客机运行Lua代码的容器,它作用于仅在客户端的对象,例如玩家的Camera。通过Players获得的LocalPlayer为当前运行该脚本的玩家
LocalScript仅在以下环境下才可运行:
Player 的 PlayerGui
Player 的 PlayerScripts
LocalFirst 服务
ModuleScript
ModuleScript它只会运行一次,并且必定返回相同的一个值。然后在 ModuleScriptNode作为唯一参数的情况下,通过调用require返回此值。对于每个Lua环境,ModuleScriptNode运行且仅运行一次,并且在后续调用require时返回该相同的值。
ModuleScript多用于重复方法的使用,在代码编写时,应当只编写一次,在其他地方对其调用。这样可以避免复写重复的函数方法,也可以将方法进行模块化管理。一般来ModuleScript用于集合一类方法或定义较为相近的方法。
需要注意的是,首次调用的时候不会暂停,直到获取到返回值。根据这种情况,一定要主要ModuleScript的嵌套问题,例如 A(ModuleScript) 对 B(ModuleScript) 进行了调用,但是 B 对 A 也进行了调用,则线程将挂起,但是不会暂停也不会报错,所以当出现复杂嵌套时,一定要注意ModuleScript之间相互的调用
在WorkSpace下创建一个Script脚本节点和ModuleScript脚本节点,填入对应内容
--ModuleScript
local PrintFunction ={}
function PrintFunction.Add(a,b)
return a+b
end
function PrintFunction.pri(c)
print(c)
end
return PrintFunction
--Script
local fun= require(script.Parent.ModuleScript)
Num = fun.Add(3,4)
fun.pri(Num)
CustomScript
创建自定义脚本
RemoteEvent
RemoteEvent(远程事件)的作用是在客户端和服务器端之间提供一个单向讯息传播途径,它允许Script(脚本)和LocalScript(本地脚本)之间互相调用其内部的代码。讯息可以由客户端传向服务器端,也可以由服务器端传向特定的客户端,还可以由服务器端传给所有客户端。
为了让服务器端和客户端都能使用远程事件,RemoteEvent对象必须处于一个能让服务器端和客户端双方都能看到的位置,RemoteEvent要求存储在MainStorage里面。
RemoteFunction
RemoteFunction(远程函数)用于创建客户端和服务器用来彼此通信的游戏内API。开发者可以通过调用RemoteFunction执行特定操作,并返回其结果。当不需要返回结果时,开发者应当转为使用异步调用且无需等待响应即可继续执行的RemoteEvent。
注意 RemoteFunction 对于调用方来说是同步执行的,会等待直到对端返回结果再执行下一条脚本。所以尽量不通过 OnClientInvoke 调用客户端
客户端如果报错,服务器同样会报错
如果客户端失去链接,同样会导致报错
如果客户端调用函数缺少返回值,则服务器会一直等待