Skip to content

组件说明

组件

进入对象或者世界编辑后,我们可以看到它们身上都挂载了许多组件。这些组件可以控制对象的外观、属性、物理特性、行为逻辑等等,给“舞台”上的“演员”赋予了生命。

官方提供了一些封装好的组件,我们可以通过组件面板直接更改对象的属性。也可以卸载掉一些不需要使用的组件。

如果官方组件不能满足需求,我们也可以通过添加触发器组件/脚本组件来制作新的组件。(对于高手来说,通过把同类型的逻辑封装成组件,可以让我们的代码更加精简易于管理。)如果不了解触发器可以查看 触发器文档

例如:我们制作一个掉落物组件,来设置不同的生物被击败后,掉落不同的物品。

lua
local Script = {}

--属性定义
Script.propertys = {
    varNum = {
    	type = Mini.Number, --定义了一个数值类型的参数
    	default = 2,--默认值
    	displayName = "掉落物数值",
    },
    varItem = {
    	type = Mini.Item,-- --定义了一个道具类型的参数
    	default = 11668,-- 默认值
    	displayName = "掉落物道具",-- 属性别名
    },
}

-- 组件启动时调用
function Script:OnStart()
    -- 监听个体事件 当此对象被击败时触发
    self:AddEvent(ObjectEvent.ObjectDie, self.OnObjectDie)
    -- ObjectEvent.ObjectDie为官方事件,可以在wiki的事件库中查看更多事件
    -- self.OnObjectDie 为下方自定义的一个函数
end

function Script:OnObjectDie(event)
    -- 定义此生物死亡时的动作
    GameObject:CreatePrefab(ObjType.DropItem, self.varItem, event.x,event.y+1,event.z, self.varNum)  
    -- 预制体类型:ObjType.DropItem 为掉落物,可以在wiki中查看其他类型
    -- 掉落物类型:self.varItem从属性面板读取创建的道具类型
    -- 事件中的位置: event.x,event.y+1,event.z, event.y+1让创建的高度必死亡的高一格
    -- 掉落物数量:self.varNum从属性面板读取创建的掉落物数量
end

return Script

完整视频教程

所有自定义的组件,除了在编辑对象时使用之外,还可以在资源背包里统一编辑管理。(此处编辑组件,会影响所有调用了这个组件的对象)

概述

组件依附在对象的逻辑片段,不可直接运行,需要挂载到对象上才能生效,一种组件在同一个对象上只能挂载一个。2.0的脚本功能就等同挂载在世界或者ui对象上的组件。

组件的属性

示例

注意:在这里定义的属性数据会自动保存, 更多类型参考 属性说明

lua
    local Script = {}
    Script.propertys = {
        -- 完整定义一个变量数字,属性字段为num
        num = {
            type = Mini.Number,     -- 属性类型
            default = 100,          -- 默认值
            displayName = "数字",   -- 属性别名
            -- 最大值等 其他属性说明配置参考属性说明
        },

        --大部分属性类型支持简单定义, 比如:
        age = 8,
        str = "你好!",
        bool = true,
        color = Mini.Color(255, 0, 0, 255), -- 红色
    }

    function Script:OnStart()
        -- 组件属性的读写示例

        -- 修改属性值
        self.num = 88

        -- 获取属性变量
        if self.num then
            self.size = self.num + 1
        end

    end

    return Script

组件的生命周期函数

示例

更多参考 组件函数

lua
    local Script = {}

    -- 组件启动时调用
    function Script:OnStart()

        --在这个函数初始化,监听事件等

        -- 监听触发器事件 玩家点击方块事件
        self:AddTriggerEvent(TriggerEvent.PlayerClickBlock, self.OnPlayerClickBlock)
    end

    function Script:OnPlayerClickBlock(event)
        print("玩家点击方块")
    end

    --定义了OnTick 则会有驱动。不需要时候尽量不定义tick,提高效率, 
    --定时逻辑可使用定时器代替
    function Script:OnTick(dt)

    end

    -- 当组件删除
    function Script:OnDestroy()

    end


    return Script

组件函数访问权限配置

示例

注意: 组件函数默认是私有函数,开放给其他组件调用时候需要额外配置,否则访问不到

lua
    local Script = {} -- 定义组件表
	--属性
	Script.propertys = {
        -- 完整定义一个变量数字,属性字段为num
        num = {
            type = Mini.Number,     -- 属性类型
            default = 100,          -- 默认值
            displayName = "数字",   -- 属性别名
            -- 最大值等 其他属性说明配置参考属性说明
        },

        --大部分属性类型支持简单定义, 比如:
        age = 8,
        str = "你好!",
        bool = true,
        color = Mini.Color(255, 0, 0, 255), -- 红色
    }

    -- 需要开放给别的组件访问的函数需要配置(配置后触发器也能访问)
    Script.openFnArgs = {
        -- 函数开放配置示例
        Add = {
                returnType = Mini.Number,   -- 返回值(不填则为无返回值)
                displayName = "函数别名",   -- 触发器上显示的别名(不填缺省则显示函数名Add)
                params = {Mini.Number, Mini.Number},-- 参数列表类型(不填则为无参数)
        },

        -- 只想支持其他脚本组件访问,不需要支持触发器的简单写法可以直接配置
        -- Add = true,
    }


    -- 函数定义示例
    function Script:Add(a, b)
        if a and b then
            return a + b
        end
    end

    -- 组件启动时调用
    function Script:OnStart()

        -- 调用自己定义的函数示例, ps:调用本组件的函数不需要任何配置
        local result = self:Add(1, 2)
        print("result", result)
    end


    return Script -- 返回组件定义的表

组件的相互操作

示例

lua
    -- 组件A
    local Script = {} -- 定义组件表


    -- 需要开放给别的组件访问的函数需要配置(配置后触发器也能访问)
    Script.openFnArgs = {
        -- 函数开放配置示例
        Add = {
                returnType = Mini.Number,   -- 返回值(不填则为无返回值)
                displayName = "函数别名",   -- 触发器上显示的别名(不填缺省则显示函数名Add)
                params = {Mini.Number, Mini.Number},-- 参数列表类型(不填则为无参数)
        },

        -- 只想支持其他脚本组件访问,不需要支持触发器的简单写法可以直接配置
        -- Add = true,
    }


    -- 函数定义示例
    function Script:Add(a, b)
        if a and b then
            return a + b
        end
    end

    -- 组件启动时调用
    function Script:OnStart()

        -- 调用自己定义的函数示例, ps:调用本组件的函数不需要任何配置
        local result = self:Add(1, 2)
        print("result", result)
    end


    return Script -- 返回组件定义的表
lua
    -- 组件B
    local Script = {} -- 定义组件表

    -- 组件启动时调用
    function Script:OnStart()

        -- 同对象下操作

        -- 获取对象上组件A
        local cmpA = self:GetComponent("组件A")

        -- 调用组件A的函数
        local result = cmpA:Add(1, 2)
        print("result", result)


        -- 跨对象操作

        -- 获取一般对象
        local obj = GameObject:FindObject("对象id")
        -- 世界对象的获取方式
        local world = GetWorld()

        -- 获取对象上组件A
        local cmpA = world:GetComponent("组件A")

    	if cmpA then
            -- 调用组件A的函数
            local result = cmpA:Add(1, 2)
            print("result", result)
        
            --获取cmpA组件的age属性
            local age = cmpA.age
			--设置cmpA的age属性值为123 ,官方和开发者的操作都是一样的	
            cmpA.age = 123
        end
    end 

    return Script -- 返回组件定义的表

组件使用简单示例

组件简单示例