This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Label 组件在游戏空间中渲染一段文本。默认情况下,它会与所有精灵和图块图形一起排序和绘制。该组件有一组属性,用于控制文本的渲染方式。Defold的GUI支持文本,但在游戏世界中放置GUI元素可能比较棘手。Labels使这一过程变得更加简单。
要创建一个 Label 组件, 在游戏对象上 右键点击 选择 Add Component ▸ Label.

(如果你想从同一模板实例化多个label,也可以创建一个新的label组件文件:在Assets浏览器中的文件夹上右键点击并选择New... ▸ Label,然后将该文件作为组件添加到任何游戏对象)

将Font属性设置为您想要使用的字体,并确保将Material属性设置为与字体类型相匹配的材质:

要使用 Vector 字体,请按照矢量字体设置,将 .font 资源分配给标签的 Font 属性,并将标签的 Material 设为 /builtins/fonts/label-vector.material。使用 Font Size 控制显示大小。
对于彩色表情符号,还需完成 COLRv1 后备字体和打包设置。以下示例假定有一个 id 为 label 的标签,并且同一游戏对象上附有脚本。将标签的 Text 留空,只在字形准备完成后显示问候语:
function init(self)
local text = "Hello 😀 🍎 🚀"
local font_resource = go.get("#label", "font")
-- 为这个共享字体资源添加后备字体,只需添加一次。
font.add_font(font_resource, "/fonts/NotoColorEmoji-Regular.ttf")
font.prewarm_text(font_resource, text, function(self, request_id, result, err)
if result then
go.set("#label", "text", text)
else
print("Could not prepare label text:", err)
end
end)
end
普通字母使用原来的字体,表情符号使用添加的彩色字体。如果其他标签或 GUI 文本节点共用该字体资源,请在一个位置初始化后备字体并复用它。
除了Id、Position、Rotation和Scale属性外,还存在以下组件特有属性:
请注意,默认材质出于性能原因禁用了阴影渲染。
Blend Mode 属性定义了组件图形应如何与其后面的图形进行混合。以下是可用的混合模式及其计算方式:
src.a * src.rgb + (1 - src.a) * dst.rgbsrc.rgb + dst.rgbsrc.rgb * dst.rgbsrc.rgb - dst.rgb * dst.rgb通过设置Pivot属性,您可以更改文本的对齐模式。
Center、North或South,则文本居中对齐。West模式,则文本左对齐。East模式,则文本右对齐。
您可以在运行时通过获取和设置标签文本以及其他各种属性来操作标签。
textstring),可通过 go.get() 和 go.set() 访问。colorvector4)outlinevector4)shadowvector4)scalenumber,或者是用于沿各轴单独缩放的vector3。sizevector3)function init(self)
-- 设置 "my_label" 组件的文本;该组件与此脚本
-- 位于同一个游戏对象中。
go.set("#my_label", "text", "New text")
local text = go.get("#my_label", "text")
print(text) -- New text
end
label.set_text() 和 label.get_text() 已弃用,请改用 text 属性。旧函数仍保留以维持兼容。旧的 setter 会将消息加入队列,而 go.set() 会立即更新文本。
function init(self)
-- 设置与此脚本在同一游戏对象中的"my_label"组件的颜色。
-- 颜色是存储在vector4中的RGBA值。
local grey = vmath.vector4(0.5, 0.5, 0.5, 1.0)
go.set("#my_label", "color", grey)
-- ...通过将其alpha设置为0来移除轮廓...
go.set("#my_label", "outline.w", 0)
-- ...沿x轴将其缩放2倍。
local scale_x = go.get("#my_label", "scale.x")
go.set("#my_label", "scale.x", scale_x * 2)
end
game.project文件中有一些与标签相关的项目设置。