Appearance
组件说明
组件
进入对象或者世界编辑后,我们可以看到它们身上都挂载了许多组件。这些组件可以控制对象的外观、属性、物理特性、行为逻辑等等,给“舞台”上的“演员”赋予了生命。
官方提供了一些封装好的组件,我们可以通过组件面板直接更改对象的属性。也可以卸载掉一些不需要使用的组件。
如果官方组件不能满足需求,我们也可以通过添加触发器组件/脚本组件来制作新的组件。(对于高手来说,通过把同类型的逻辑封装成组件,可以让我们的代码更加精简易于管理。)如果不了解触发器可以查看 触发器文档
例如:我们制作一个掉落物组件,来设置不同的生物被击败后,掉落不同的物品。
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 -- 返回组件定义的表