事件系统

迷你世界 Studio 事件系统: 除了属性和函数的事件外,玩家还可以自定义事件,根据条件发出一些信号。

等待

wait()会使脚本暂停,直到指定事件的发生。除了能够传递发生的事件,还可以返回相关联的信息。

实例:玩家触碰到复活点模型时,等待被触碰后触发输出

连接

较为常用的一种方式,大部分节点都具有事件,可以使用 Connect() 进行连接,

实例:创建一个数值节点,当其变化时打印日志

local level = SandboxNode.New("Int",WorkSpace)
level.Name = "等级"
level.Value = 5

local function changed(value)
	print("当前等级为"..value)
end

level.ValueChanged:Connect(changed)
level.Value = 6
level.Value = 3
level.Value = 2

如何取消连接

经过一定的时间或者满足一定的条件,可能需要取消连接,我们可以使用Disconnect()断开连接。需要获得Connect()的返回值。

值得注意的一点是,如果节点被消耗这些连接会自动断开不需要手动断开。

local level = SandboxNode.New("Int",WorkSpace)
level.Name = "等级"
level.Value = 5

local connection

local function changed(value)
	if value<4 then
		connection:Disconnect()
	end
	print("当前等级为"..value)
end

connection = level.ValueChanged:Connect(changed)
level.Value = 6
level.Value = 5
level.Value = 2

如何使用嵌套连接

在实际开发中,开发者面临的业务逻辑可能需要多层的嵌套,开发者可以使用第一个事件的局部函数进行绑定。

local level1 = SandboxNode.New("Int",WorkSpace)
local level2 = SandboxNode.New("Int",WorkSpace)

level1.Name = "等级1"
level2.Name = "等级2"
level1.Value = 5
level2.Value = 4

local function changed(value)
	if value<5 then
		level2.ValueChanged:Connect(function(value)
			print("等级2发生了改变")
		end)
	end
	print("等级1发生了改变")
end

level1.ValueChanged:Connect(changed)

level1.Value = 6
level2.Value = 10
level1.Value = 4
level2.Value = 15
level1.Value = 2
level2.Value = 18

自定义事件

在实际开发中,开发者会遇到需要自定义事件的情况。例如当某位玩家获得积分第一名后,需要一个脚本播放指定特效,一个脚本对全部玩家进行通知。这种情况就可以通过 CustomNotify 进行触发。与 RemoteEvent 不同,CustomNotify 不能进行跨界通知。

local CustomNotify = SandboxNode.New("CustomNotify")
--监听事件
CustomNotify.Notify:Connect(function(v1, v2)
        print("TestNotify->"..v1.." "..v2)
        --TestNotify->100 hello
end)
--发送自定义事件
CustomNotify:Fire(100,"hello")
Last Updated: