Appearance
显示板入门(一):放置显示板与调整内容
这篇从放下一块文字板开始,依次做欢迎牌、海报、进度条和按钮面板。前半部分只调整属性,后面使用触发器或代码制作可交互界面。
1. 把文字板放进地图
- 进入一张 3.0 高级创造模式地图,找一块方便观察的空地。
- 进入选择模式,打开放置对象入口,选择文字板并放入场景。
- 选中刚放下的文字板,打开它的组件属性,找到显示板组件。
- 检查“显示内容类型”为文字,把“输入内容”改成:欢迎来到迷你世界!
- 使用对象的移动工具,把牌子放到入口旁边;如果朝向不合适,用旋转工具调整,让正面朝向来访的玩家。


2. 先做一块清楚的欢迎牌
在显示板组件中,试着填入下面这组设置:
| 属性 | 练习设置 | 有什么效果 |
|---|---|---|
| 默认显示 | 开 | 进入运行模式后能看到牌子 |
| 宽、高 | 宽 4,高 2 | 做一块横向牌子;场景模式下基础宽高单位是米 |
| 空间模式 | 场景 | 像真实招牌一样放在世界中 |
| 底板颜色 | 灰色 | 给文字配一个深色背景 |
| 底板不透明度 | 100 | 背景完全不透明 |
| 整体颜色 | 白色 | 先不对整块牌子额外染色 |
| 整体不透明度 | 100 | 让整块牌子清楚显示 |
| 文字颜色 | 白色 | 与深色底板形成对比 |
| 自动大小 | 缩放文字 | 让文字自动调整大小,放进牌子里 |
| 水平对齐、垂直对齐 | 都选居中 | 把欢迎语放在中央 |
| 字号 | 60 | 字大一点 |
想做“悬浮文字”?把底板不透明度改成 0,整体不透明度仍保留 100。不要把整体不透明度也改成 0,否则文字也看不见了。

3. 绕着牌子走一圈
- 保持“空间模式 → 场景”,绕到牌子侧面,观察板面不会跟着你转。
- 改成“屏幕(近大远小)”,再次绕行,观察牌子是否始终朝向镜头;再走近、走远,比较显示大小。
- 试试“屏幕(固定大小)”,比较远近时的显示尺寸。
- 这次做的是固定朝向的入口欢迎牌,比较结束后改回场景,再调整对象旋转。
4. 让入口两边、白天夜晚都方便阅读
- 保持场景模式,将“双面显示”改为背面显示底板,走到背面检查欢迎语。
- 将“受光方式”改为自发光,发光强度设为 1。在地图已有的白天、夜晚条件下比较文字是否清楚;本练习不要求另外制作时间控制逻辑。
- 将“显示距离上限”设为 30 米,观察走远后隐藏、走近后重新显示的效果。
其他背面和光照选项可查 Wiki「通用属性」。

5. 让文字更好读
在刚完成的欢迎牌里,把文字改成两行:
text
欢迎来到迷你世界!
准备好后,一起出发吧。先选择“自动大小 → 缩放文字”。文字会自动调整到能放进内容区域的大小,也会根据空间换行。
如果你想自己决定字号,就把“自动大小”改成无,再调整“字号”。
接着把水平对齐改为居左、垂直对齐改为居中,给白色文字加上深色细描边。如果两行挤在一起,再稍微增加行间距,直到读起来舒服。
选择“自动大小 → 无”后,内容太多可能被裁掉。可以减少文字、增加牌子高度,或改回“缩放文字”。
本练习保持富文本关闭。字间距、阴影和富文本等完整说明见 Wiki「文字」。

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

7. 先摆出一根血条
进度条像一个会变化的刻度。用来显示血量时,最小值是空血,最大值是满血,当前值是现在剩下的血量。
- 放置进度条板,内容类型选进度条。
- 先设置最小值 0、最大值 100,再把当前值改成 75。
- 进度条类型选条形进度条,方向选从左到右。
- 进度颜色选红色,进度背景颜色选深灰色;暂时不选进度图片和背景图片。
- 进度值样式选当前值/最大值,应该能看到
75/100。 - 调整宽高,例如宽 2、高 0.3;把数值文字改成容易看清的颜色,再调整字号,让文字放得下。
最小值必须小于最大值。本例中 75/100 表示填满四分之三;把当前值改为 25,就会只剩四分之一。这时数值是你手动填的,还没有与任何生物连接。
数值文字显示不全时,调小字号或增加宽高。环形、图片和其他数值样式可查 Wiki「进度条」;本练习保留条形,方便血条篇继续制作血条。

8. 把界面放到显示板上
“界面”能把多个文字、图片和按钮组合在一起。我们先做一个只有标题和按钮的小面板。
- 进入项目的界面编辑入口,新建一个自定义界面,命名为打招呼。


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


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


- 在触发器中添加对玩家显示聊天和设置元件的文本内容。 注意:元件相关接口的界面参数,已支持“界面&对象”。当事件触发时,如果选择“当前编辑的界面”时,则会修改当前界面挂载到的对象的元件;如果选择的是界面id,则会修改2d界面;如果选择的是某个对象,则会修改该对象上的元件。

然后关闭界面设置的“打开游戏显示界面”,不然你一运行游戏就会看到刚刚添加的界面

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


9. 试玩并保存三个素材
进入运行,检查欢迎语完整可读、海报没有误裁切、进度条设为 25 时显示 25/100,界面里的按钮也完整可见并点击。
保存地图,保留欢迎牌、进度条板和“打招呼面板”。

10. Lua 实践:点击后自动出现问候文字
这个版本新建一个界面,脚本从点击事件中自动取得玩家和显示板 ID,并创建一段提示文字。不需要手填界面 ID 或控件 ID。
10.1 准备与挂载
- 新建一个界面,然后添加一个按钮,左上方
(40, 40)起的600×80区域留空。避免新文字挡住它们。 - 在界面中新建脚本组件“显示板按钮反馈”,粘贴下面的完整代码,保存并挂载在ui界面上,不要挂到对象资源上。
- 在场景中新建显示板,然后选择该界面,并开启响应点击,站到响应距离内。进入运行模式,点击按钮。
脚本不创建界面资源,也不自动画按钮;它为已经准备好的面板添加点击效果。本例监听板内所有按钮,所以入门面板只放一个按钮;多按钮玩法需要再用 event.uielement 判断具体按钮。

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
