Skip to content

触发器脚本交互

脚本发送广播消息

  • 步骤如下:

    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