当前位置: 首页 > news >正文

迷你世界UGC3.0脚本Wiki组件说明

迷你世界UGC3.0脚本Wiki


Menu
On this page
Sidebar Navigation
快速入门
首页

组件介绍

MOD、组件介绍

什么是Lua编程

开发者常见问题

组件介绍
组件函数

组件属性

全局函数

对象介绍

触发器脚本交互

脚本方法

二维表介绍

组件说明

事件
触发器事件管理

组件事件管理

函数库
服务模块
世界模块管理接口 World

对象模块管理接口 GameObject

角色模块管理接口 Actor

玩家模块管理接口 Player

生物模块管理接口 Monster

方块模块管理接口 Block

道具模块管理接口 Item

背包模块管理接口 Backpack

界面模块管理接口 CustomUI

图文信息模块管理接口 Graphics

区域模块管理接口 Area

容器模块管理接口 WorldContainer

资源模块管理接口 Mod

计时器模块管理接口 Timer

状态模块管理接口 Buff

消息模块管理接口 Chat

普通变量数据管理接口 Data

数组变量数据管理接口 Array

二维表变量数据管理接口 Table

云服模块管理接口 CloudSever

全局函数
全局函数

脚本常见问题
开发者常见问题

进阶指南
触发器脚本交互

对象介绍

二维表介绍

更新日志
更新日志

组件说明
组件


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

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

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

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


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对象上的组件。

组件的属性
示例

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


    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
组件的生命周期函数
示例

更多参考 组件函数


    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
组件函数访问权限配置
示例

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


    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 -- 返回组件定义的表
组件的相互操作
示例


    -- 组件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 -- 返回组件定义的表

    -- 组件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 -- 返回组件定义的表
组件使用简单示例
组件简单示例

Last updated: 2025/4/27 14:27

Pager
Previous page
二维表介绍
Next page
触发器事件管理

相关文章:

  • 进程控制的学习
  • Ubuntu 磁盘空间占用清理(宝塔)
  • 蓝桥杯 16. 密文搜索
  • C# 利用log4net 工作台打印和保存到文件
  • Redis使用总结
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 数字特征
  • MIT6.S081 - Lab10 mmap(文件内存映射)
  • 学习笔记—双指针算法—移动零
  • (done) 吴恩达版提示词工程 8. 聊天机器人 (聊天格式设计,上下文内容,点餐机器人)
  • Spark-Streaming2
  • 【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?
  • Git常用命令简明教程
  • Git 撤回合并提交
  • 在web应用后端接入内容审核——以腾讯云音频审核为例(Go语言示例)
  • Spark Mllib 机器学习
  • 将你的本地项目发布到 GitHub (新手指南)
  • Unreal Engine 实现软件测试方案的仿真体验
  • 【大模型】图像生成 - Stable Diffusion 深度解析:原理、应用与实战指南
  • R语言操作n
  • 数据集下载(AER 和causaldata R包)
  • 广西干旱程度有所缓解,未来一周旱情偏重地区降水量仍不足
  • 日中友好议员联盟代表团访问中国人民对外友好协会
  • 《奇袭白虎团》原型人物之一赵顺合辞世,享年95岁
  • 下任美联储主席热门人选沃什:美联储犯下“系统性错误”,未能控制一代人以来最严重的通胀
  • 党旗下的青春|83岁仍在“下生活”,他说生活是创作的源泉
  • 在上海生活8年,13岁英国女孩把城市记忆写进歌里