Appearance
触发器脚本交互
脚本发送广播消息
步骤如下:
1.触发器组件中新建广播消息,并添加广播事件对应的执行逻辑。
2.脚本中发送广播消息,广播消息名选择广播ID即可。
动图演示:
脚本代码如下:
lua
local Script = {}
function Script:OnStart()
-- 监听触发器事件 玩家点击方块事件
self:AddTriggerEvent(TriggerEvent.PlayerClickBlock, self.OnPlayerClickBlock)
end
function Script:OnPlayerClickBlock(event)
self:PushCustomEvent("具体广播ID",2,3) -- 需要选择具体广播ID替换
end
return Script
脚本监听广播消息
步骤如下:
1.触发器组件中新建广播消息,并添加发送广播消息的事件。
2.脚本OnStart中添加监听广播消息,并实现广播消息对应的处理逻辑。
动图演示:
脚本代码如下:
lua
local Script = {}
function Script:OnStart()
self:AddCustomEvent("具体广播ID", self.OnCustomEvent) --具体广播ID需要选择替换
end
function Script:OnCustomEvent(event, arg1,arg2)
Chat:SendSystemMsg("消息名 : " .. event.eventType)
Chat:SendSystemMsg("参数1 : " .. tostring(arg1))
Chat:SendSystemMsg("参数2 : " .. tostring(arg2))
end
return Script
脚本调用触发器自定义函数
步骤如下:
1.触发器组件中新建自定义函数,并实现函数功能。
2.脚本中获取触发器组件,然后选择自定义函数,传入参数。
3.转玩法执行触发事件查看效果。
动图演示:
脚本代码如下:
lua
local Script = {}
function Script:OnStart()
-- 监听触发器事件 玩家点击方块事件
self:AddTriggerEvent(TriggerEvent.PlayerClickBlock, self.OnPlayerClickBlock)
end
function Script:OnPlayerClickBlock(event)
-- 获取当前脚本对象 如果查找的触发器组件和当前脚本组件挂载到同一个物体上,则可以直接获取组件
local obj = self
-- 获取当前世界对象 如果查找的触发器组件挂载到世界对象上,当前脚本组件不是挂载世界对象上,则需要获取世界对象
-- obj = GetWorld()
-- 获取当前物体 如果查找的触发器组件挂载非世界对象上,则需要获取物体
-- obj = GameObject:FindObject("7482986899365911542-22886") --获取UI对象
--获取obj对象的触发器组件·
local cmp = obj:GetComponent("具体组件ID") --需要选择具体组件替换
if cmp then
-- 调用触发器组件的自定义函数 传入参数2和3
local ret = cmp:具体自定义函数名(2,3) --需要选择自定函数替换
-- 发送系统消息 将ret转换为字符串并发送
Chat:SendSystemMsg(tostring(ret))
end
end
return Script
触发器调用脚本开放函数
步骤如下:
1.脚本中新建自定义函数,并实现函数功能。
2.在脚本openFnArgs配置中声明需要开放外部调用的函数
3.触发器组件中选择脚本,然后选择自定义函数,传入参数。
动图演示:
脚本代码如下:
lua
local Script = {}
Script.openFnArgs = {
Add = {
returnType = Mini.Number, -- 返回值(不填则为无返回值)
displayName = "脚本加法", -- 代码块上显示的别名(不填缺省则显示函数名)
params = {Mini.Number, Mini.Number},-- 参数列表类型(不填则为无参数)
},
SpawnMob = {
displayName = "生物生成", -- 代码块上显示的别名(不填缺省则显示函数名)
params = {Mini.Vec3, Mini.MobType,Mini.Number},-- 参数列表类型 参考组件属性说明
},
}
-- 返回两个数值相加
function Script:Add(a, b)
if a and b then
return a + b
end
end
-- 生成生物 传入位置 生物对象 数量
function Script:SpawnMob(pos, monstertype,num)
if pos and monstertype and num and num > 0 then
local objs = GameObject:CreatePrefab(ObjType.Mob, monstertype, pos.x, pos.y, pos.z,num)
if objs and #objs > 0 then
for i, objid in ipairs(objs) do
Chat:SendSystemMsg(string.format("序号 : %d 对象ID : %d ",i,objid) )
end
end
end
end
return Script