Skip to content

首页

欢迎

欢迎来到迷你世界!迷你世界是一个多人联机的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内,游戏会按以下步骤运行:

  1. 应用来自玩家设备的更新
  2. 应用来自脚本的更新
  3. 更新游戏的物理状态
  4. 把状态同步给所有脚本,并安排脚本下一次更新
  5. 把更新后的状态发送给所有玩家设备

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

完整视频教程

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

继续学习