Appearance
首页
欢迎
欢迎来到迷你世界!迷你世界是一个多人联机的3D创意平台,拥有着低门槛、高上限的工具,让不同能力的创作者都能把自己的奇思妙想构建、编辑并分享出来。我们相信大家能在迷你世界里创作出精彩的作品,把幻想变成现实。
在迷你世界中,创作一个属于自己的游戏有很多种方式,除了可视化的触发器之外,迷你世界原版的开发框架可以使用Lua脚本语言进行开发编辑。该类方法针对有一定编程基础的小伙伴,可以对自己的自定义生物、方块、UI、玩法等内容的逻辑进行开发,有着更高的自由度,阅读性,版本控制,可以更好的制作游戏, 我们也提供了完善的API接口给大家使用。建议在Windows PC平台上进行开发,以获得最好的体验。
简单入门
进入3.0地图后,点击右上角图标即可创建一个世界节点的脚本
代码功能非常强大,几乎能控制游戏的任何方面。举几个例子:
1、如何在聊天框打印:你好!迷你世界!(使用前请先将原有编辑器的代码全部删除哦!)
lua
local Script = {}
-- 组件启动时调用
function Script:OnStart()
Chat:SendSystemMsg("你好,迷你世界!")
end
return Script
- 代码解读:
- 是不是很简单,把这段代码贴到脚本中试试吧!
- 还可以把里面的汉字换成其他的试试
- 如果想要输出很多句,那就多粘贴几行
2、在坐标:10,8,10的位置刷出一只野萌宝怪物
lua
local Script = {}
-- 组件启动时调用
function Script:OnStart()
GameObject:CreatePrefab(ObjType.Mob, 3102, 10,8,10)
end
return Script
- 代码解读:
- 野萌宝是游戏中常见的怪物,但是由地图随机刷出的,这一句脚本指令就可以让野萌宝按照指定坐标点刷出了
- 把代码粘贴到脚本编辑区试试吧,如果不怕危险的话,还可以多刷出一些出来,当然坐标也是可以修改的
代码运行
在使用脚本编辑器之前,你要掌握一些Lua基础知识。每个地图的脚本会在主机端运行,对游戏世界里的各种事件做出反应,并且更新游戏的状态。
游戏状态每隔50毫秒更新一次,这个时间间隔叫做1tick。在每一tick内,游戏会按以下步骤运行:
- 应用来自玩家设备的更新
- 应用来自脚本的更新
- 更新游戏的物理状态
- 把状态同步给所有脚本,并安排脚本下一次更新
- 把更新后的状态发送给所有玩家设备
Events 事件
每当引擎发生更改时,事件就会分派到脚本中。可以使用 TriggerEvent 监听这些事件。要监听事件,请使用传入的处理程序作为参数来调用它。
比如一个简单的玩法点草成金:“每当点草块时,把它变成钛合金”,要实现这个玩法需要:
①首先监听事件任意玩家点击;
②事件触发后判断被点击的方块是否为草块;
③如果是,就在被点击的位置创建钛合金块。
像这样,监听事件、进行判断、执行操作是进行玩法创作的基本形式。“监听事件”可以在下面事件列表里查询,“进行判断”可以根据需要自行处理,“执行操作”一般就要用到各种接口了。
每个接口相当于一个小功能,调用之后可以进行各种操作,组合起来就可以实现各种玩法。比如上面例子里,“在被点击的位置创建钛合金块”,我们需要“在指定位置创建指定方块”的功能,通过查询方块管理接口,可以找到:
替换指定坐标处为某方块:
result=Block:ReplaceBlock( blockid , x , y , z ,face, color) | result=Block:ReplaceBlock(452 , 0, 7 , 0 ) |
---|---|
result:true成功 false失败 | true |
blockid:要设置的方块id x,y,z:要设置的坐标 face:方块朝向 color:方块的颜色 | 452, 0,7,0 可不填 可不填 |
替换某位置的方块接口 | 替换(0,0)高度7的位置生成一个钛合金 |
也就是说,只要调用这个接口,传入钛合金块id和被点击的坐标,就可以把指定坐标的方块设置为钛合金块。
那么如何完成①首先监听事件任意玩家点击;获取“被点击的位置”呢?通过查询方块事件列表:
Player.ClickBlock:玩家点击方块时触发 |
---|
eventobjid:点击方块的玩家迷你号 blockid:被点击的方块id x,y,z:被点击的方块坐标 |
可以看到,“玩家点击方块”这个事件参数共有{eventobjid,blockid,x,y,z}五个值,其中x、y、z就是我们需要的坐标值,另外还需要blockid来判断被点击的方块是否为石头。迷你里注册事件监听的脚本代码为:
ScriptSupportEvent:registerEvent([=[事件名]=],函数名)
比如这里我们需要监听事件“玩家点击方块”,那么就需要将 TriggerEvent.PlayerClickBlock 派发到 self.Player_Click (函数名是任意的):
lua
self:AddTriggerEvent(TriggerEvent.PlayerClickBlock, self.Player_Click)
--TriggerEvent.PlayerClickBlock是官方提供的事件监听,可以在wiki中查看更多的事件
--self.Player_Click 是自定义的一个函数名,可以改成其他你喜欢的
然后在组件启用的时候添加监听
lua
-- 组件启动时调用
function Script:OnStart()
-- 添加玩家移动事件监听
self:AddTriggerEvent(TriggerEvent.PlayerClickBlock, self.Player_Click)
end
接着完成②事件触发后判断被点击的方块是否为草块; **③如果是,就在被点击的位置创建钛合金块。**在定义点击的时候进行判断,如果符合则执行对应效果
lua
-- 定义事件触发时的动作
function Script:Player_Click(event)
-- 玩家点击方块时,判断点的是否是草块
if event.blockid == 100 then
local success = Block:ReplaceBlock(452, event.x, event.y, event.z)
-- Block:ReplaceBlock是官方提供的放置方块方法,可以在wiki中查看更多的方法
-- local success 用来接收Block:ReplaceBlock运行后的结果,可以用来做是否成功放置的判断
-- event.x是上面的官方事件产生的事件参数,可以通过Player_Click(event)中的event.x来获取事件中的x,event.blockid获取事件中的方块类型。event可以叫其他任意名字,例如Player_Click(aaa),获取的时候就是aaa.x。
end
end
最后是完整的代码,下面的脚本将会在玩家进入游戏后,监听玩家是否点击草块,如果点击草块则会把草块替换成钛合金(452)。
lua
-- 官方定义的函数,不能修改变动
local Script = {}
-- 组件启动时调用
function Script:OnStart()
-- 添加玩家点击事件监听
self:AddTriggerEvent(TriggerEvent.PlayerClickBlock, self.Player_Click)
--TriggerEvent.PlayerClickBlock是官方提供的事件监听,可以在wiki中查看更多的事件
--self.Player_Click 是自定义的一个函数名,可以改成其他你喜欢的
end
-- 定义事件触发时的动作
function Script:Player_Click(event)
-- 玩家点击方块时,判断点的是否是草块
if event.blockid == 100 then
local success = Block:ReplaceBlock(452, event.x, event.y, event.z)
-- Block:ReplaceBlock是官方提供的放置方块方法,可以在wiki中查看更多的方法
-- local success 用来接收Block:ReplaceBlock运行后的结果,可以用来做是否成功放置的判断
end
end
-- 官方定义的函数,不能修改变动
return Script
完整教程视频
迷你世界常用类介绍
World 世界
world对象是整个迷你世界 API的入口点。它具有设置世界基础玩法、规则的作用。
Block 方块
block可让你修改世界地形。迷你世界的世界地形由一个个方块构建而成。你可以使用Block:PlaceBlock()在指定的世界坐标位置放置一个指定的方块。
Player 玩家
Player 是 迷你世界 世界中具有特殊类型的实体,玩家具有特殊的属性。可以使用 TriggerEvent.GameAnyPlayerEnterGame 捕获玩家进入游戏的事件,或使用 TriggerEvent.GameAnyPlayerLeaveGame 检测玩家离开游戏。
Actor 对象
迷你世界世界中的游戏对象,实体具有模型、变换、物理组件,还有其他的一些常见组件,如粒子特效、运动器、音效等。可以在脚本中调用 GameObject:CreatePrefab()来创建实体。还可以通过调用实体对象身上的 GameObject:Destroy() 来销毁该实体。
组件编辑
进入对象或者世界编辑后,我们可以看到它们身上都挂载了许多组件。这些组件可以控制对象的外观、属性、物理特性、行为逻辑等等,给“舞台”上的“演员”赋予了生命。
官方提供了一些封装好的组件,我们可以通过组件面板直接更改对象的属性。也可以卸载掉一些不需要使用的组件。
如果官方组件不能满足需求,我们也可以通过添加触发器组件/脚本组件来制作新的组件。(对于高手来说,通过把同类型的逻辑封装成组件,可以让我们的代码更加精简易于管理。)如果不了解触发器可以查看 触发器文档
例如:我们制作一个掉落物组件,来设置不同的生物被击败后,掉落不同的物品。
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
完整视频教程
所有自定义的组件,除了在编辑对象时使用之外,还可以在资源背包里统一编辑管理。(此处编辑组件,会影响所有调用了这个组件的对象)