Skip to content

显示板入门(一):放置显示板与调整内容 ​

返回显示板功能 Wiki

这篇从放下一块文字板开始,依次做欢迎牌、海报、进度条和按钮面板。前半部分只调整属性,后面使用触发器或代码制作可交互界面。

1. 把文字板放进地图 ​

  1. 进入一张 3.0 高级创造模式地图,找一块方便观察的空地。
  2. 进入选择模式,打开放置对象入口,选择文字板并放入场景。
  3. 选中刚放下的文字板,打开它的组件属性,找到显示板组件。
  4. 检查“显示内容类型”为文字,把“输入内容”改成:欢迎来到迷你世界!
  5. 使用对象的移动工具,把牌子放到入口旁边;如果朝向不合适,用旋转工具调整,让正面朝向来访的玩家。
  6. image-20261020153448515image-20261020153740651 image-20261020154209447

2. 先做一块清楚的欢迎牌 ​

在显示板组件中,试着填入下面这组设置:

属性练习设置有什么效果
默认显示开进入运行模式后能看到牌子
宽、高宽 4,高 2做一块横向牌子;场景模式下基础宽高单位是米
空间模式场景像真实招牌一样放在世界中
底板颜色灰色给文字配一个深色背景
底板不透明度100背景完全不透明
整体颜色白色先不对整块牌子额外染色
整体不透明度100让整块牌子清楚显示
文字颜色白色与深色底板形成对比
自动大小缩放文字让文字自动调整大小,放进牌子里
水平对齐、垂直对齐都选居中把欢迎语放在中央
字号60字大一点

想做“悬浮文字”?把底板不透明度改成 0,整体不透明度仍保留 100。不要把整体不透明度也改成 0,否则文字也看不见了。

image-20261020155148461

3. 绕着牌子走一圈 ​

  1. 保持“空间模式 → 场景”,绕到牌子侧面,观察板面不会跟着你转。
  2. 改成“屏幕(近大远小)”,再次绕行,观察牌子是否始终朝向镜头;再走近、走远,比较显示大小。
  3. 试试“屏幕(固定大小)”,比较远近时的显示尺寸。
  4. 这次做的是固定朝向的入口欢迎牌,比较结束后改回场景,再调整对象旋转。

image-20261020155218657

4. 让入口两边、白天夜晚都方便阅读 ​

  1. 保持场景模式,将“双面显示”改为背面显示底板,走到背面检查欢迎语。
  2. 将“受光方式”改为自发光,发光强度设为 1。在地图已有的白天、夜晚条件下比较文字是否清楚;本练习不要求另外制作时间控制逻辑。
  3. 将“显示距离上限”设为 30 米,观察走远后隐藏、走近后重新显示的效果。

其他背面和光照选项可查 Wiki「通用属性」。

image-20261020155322310

5. 让文字更好读 ​

在刚完成的欢迎牌里,把文字改成两行:

text
欢迎来到迷你世界!
准备好后,一起出发吧。

先选择“自动大小 → 缩放文字”。文字会自动调整到能放进内容区域的大小,也会根据空间换行。

如果你想自己决定字号,就把“自动大小”改成无,再调整“字号”。

接着把水平对齐改为居左、垂直对齐改为居中,给白色文字加上深色细描边。如果两行挤在一起,再稍微增加行间距,直到读起来舒服。

选择“自动大小 → 无”后,内容太多可能被裁掉。可以减少文字、增加牌子高度,或改回“缩放文字”。

本练习保持富文本关闭。字间距、阴影和富文本等完整说明见 Wiki「文字」。

image-20261020155440575

6. 做一张图片海报 ​

  1. 放置图片板,在显示板组件里确认内容类型为图片。
  2. 在“图片”属性中选择喜欢的图片。
  3. 把板子的宽高调成适合海报的比例,例如宽 3、高 4。
  4. 先把“整体颜色”设为白色,避免整张图片被额外染色。
  5. 填充方式先选适应,检查图片四边的重要内容是否完整。
  6. 再改成填充,比较板子是否铺满、边缘是否被裁掉。这个练习希望保留完整海报,比较结束后改回适应。

另外两种填充方式见 Wiki「图片」。

image-20261020155559842

7. 先摆出一根血条 ​

进度条像一个会变化的刻度。用来显示血量时,最小值是空血,最大值是满血,当前值是现在剩下的血量。

  1. 放置进度条板,内容类型选进度条。
  2. 先设置最小值 0、最大值 100,再把当前值改成 75。
  3. 进度条类型选条形进度条,方向选从左到右。
  4. 进度颜色选红色,进度背景颜色选深灰色;暂时不选进度图片和背景图片。
  5. 进度值样式选当前值/最大值,应该能看到 75/100。
  6. 调整宽高,例如宽 2、高 0.3;把数值文字改成容易看清的颜色,再调整字号,让文字放得下。

最小值必须小于最大值。本例中 75/100 表示填满四分之三;把当前值改为 25,就会只剩四分之一。这时数值是你手动填的,还没有与任何生物连接。

数值文字显示不全时,调小字号或增加宽高。环形、图片和其他数值样式可查 Wiki「进度条」;本练习保留条形,方便血条篇继续制作血条。

image-20261020155717419

8. 把界面放到显示板上 ​

“界面”能把多个文字、图片和按钮组合在一起。我们先做一个只有标题和按钮的小面板。

  • 进入项目的界面编辑入口,新建一个自定义界面,命名为打招呼。

image-20261020155925166image-20261020155943248

  • 添加一个文字控件,内容写“来打个招呼吧!”。

image-20261020160042869image-20261020161002692

  • 添加一个按钮控件,然后添加触发器。

image-20261020160151113image-20261020161842305

  • 在触发器中添加对玩家显示聊天和设置元件的文本内容。 注意:元件相关接口的界面参数,已支持“界面&对象”。当事件触发时,如果选择“当前编辑的界面”时,则会修改当前界面挂载到的对象的元件;如果选择的是界面id,则会修改2d界面;如果选择的是某个对象,则会修改该对象上的元件。
image-20261020164146180
  • 然后关闭界面设置的“打开游戏显示界面”,不然你一运行游戏就会看到刚刚添加的界面

    image-20261020160653541
  • 回到场景,放置一块界面板,把内容类型设为界面。在“界面选择”中选中刚保存的打招呼面板。(没有选择界面时,显示板只显示空白底板。如果你看到一块空板,先检查这一项。)

image-20261020160349920image-20261020160357798

9. 试玩并保存三个素材 ​

进入运行,检查欢迎语完整可读、海报没有误裁切、进度条设为 25 时显示 25/100,界面里的按钮也完整可见并点击。

保存地图,保留欢迎牌、进度条板和“打招呼面板”。

20261020182300_rec_

10. Lua 实践:点击后自动出现问候文字 ​

这个版本新建一个界面,脚本从点击事件中自动取得玩家和显示板 ID,并创建一段提示文字。不需要手填界面 ID 或控件 ID。

10.1 准备与挂载 ​

  1. 新建一个界面,然后添加一个按钮,左上方 (40, 40) 起的 600×80 区域留空。避免新文字挡住它们。
  2. 在界面中新建脚本组件“显示板按钮反馈”,粘贴下面的完整代码,保存并挂载在ui界面上,不要挂到对象资源上。
  3. 在场景中新建显示板,然后选择该界面,并开启响应点击,站到响应距离内。进入运行模式,点击按钮。

脚本不创建界面资源,也不自动画按钮;它为已经准备好的面板添加点击效果。本例监听板内所有按钮,所以入门面板只放一个按钮;多按钮玩法需要再用 event.uielement 判断具体按钮。

20261021192050_rec_

10.2 完整代码 ​

lua
-- 创建 UI 类型脚本组件,挂在“打招呼面板”的界面根节点上。
-- 保存界面,再由场景显示板引用;不要直接挂为实体脚本组件。
-- 入门面板只保留一个按钮;无需填写对象 ID 或按钮 ID。
local Script = {}

function Script:OnStart()
    self.boardId = self:GetGameObjectId()
    -- 同一界面作为普通 2D UI 打开时,不运行本例的显示板逻辑。
    if type(self.boardId) ~= "number" then
        return
    end
    self.feedbackByPlayer = {}
    local board = self:GetComponent("UIBillboard")
    if not board or board:GetType() ~= DisplayBoardContentType.Interface then
        print("请将 UI 脚本挂在界面根节点,保存界面后由显示板引用。")
        return
    end
    local uiId = board:GetInterface()
    if type(uiId) ~= "string" or uiId == "" then
        print("请先在显示板组件中选择打招呼面板,再重新运行。")
        return
    end
    -- 不传按钮过滤参数,监听这块板内的按钮点击。
    self:AddTriggerEvent(TriggerEvent.UIButtonClick, self.OnHelloClick)
end

function Script:OnHelloClick(event)
    -- 排除普通 2D 界面,以及其他显示板的事件。
    if not event or type(event.CustomUI) ~= "number"
        or event.CustomUI ~= self.boardId then
        return
    end
    if type(event.eventobjid) ~= "number" or event.eventobjid == 0
        or type(event.uielement) ~= "string" or event.uielement == "" then
        return
    end
    local playerId = event.eventobjid
    local textId = self.feedbackByPlayer[playerId]
    if not textId then
        textId = CustomUI:CreateElement(playerId, self.boardId, ElementType.Text)
        if type(textId) ~= "string" or textId == "" then
            print("提示文字创建失败,请检查界面是否已绑定。")
            return
        end
        self.feedbackByPlayer[playerId] = textId
        -- 面板画布使用 1280×720;左上方预留提示区域。
        CustomUI:SetSize(playerId, self.boardId, textId, 600, 80)
        CustomUI:SetPosition(playerId, self.boardId, textId, 40, 40)
        CustomUI:SetFontSize(playerId, self.boardId, textId, 32)
        CustomUI:SetColor(playerId, self.boardId, textId, 0xFFFFFF)
    end
    CustomUI:SetText(
        event.eventobjid, -- 本次点击的玩家
        event.CustomUI,  -- 数字类型:本次点击的显示板对象 ID
        textId,         -- 动态创建的文本元件,不能填按钮本体 ID
        "你好,冒险家!")
end

return Script