<Element/>
Element 在实体上绘制文本、图像或不可见组,位于 Screen 下,可使用屏幕或世界空间。type 为 text、image 或 group,anchor 和 pivot 控制相对布局。
用法
在 Screen 后代实体中添加 Element。文本指定 type=text 与 fontAsset,可通过 useFont 加载。
<Entity name="label">
<Element
type="text"
fontAsset={font}
text="Hello, World!"
fontSize={84}
anchor={[0.5, 0.5, 0.5, 0.5]}
pivot={[0.5, 0.5]}
/>
</Entity>
以下显示屏幕空间文本,MSDF 字体由 font-tools 创建,再由 useFont 加载。
- 演示
- 代码
TextExample.jsx
import { Application, Entity } from '@playcanvas/react';
import { Camera, Screen, Element } from '@playcanvas/react/components';
import { useFont } from '@playcanvas/react/hooks';
const TextScene = () => {
// An MSDF font asset generated with font-tools (https://playcanvas.github.io/font-tools/).
// Loading the .json automatically pulls in the sibling .png atlas page(s).
const { asset: font } = useFont('/assets/fonts/source-sans.json');
if (!font) return null;
return (
<Entity>
{/* A camera to render the UI */}
<Entity name="camera">
<Camera clearColor="#1a1a2e" />
</Entity>
{/* A screen-space UI screen with a centred line of text */}
<Entity name="screen">
<Screen referenceResolution={[1280, 720]} />
<Entity name="label">
<Element
type="text"
fontAsset={font}
text="Hello, World!"
fontSize={84}
anchor={[0.5, 0.5, 0.5, 0.5]}
pivot={[0.5, 0.5]}
/>
</Entity>
</Entity>
</Entity>
);
};
const TextExample = () => (
<Application>
<TextScene />
</Application>
);
export default TextExample;
详见 ElementComponent。
属性
| 名称 | 类型与说明 | 默认值 |
|---|---|---|
screen? | Entity | null此组件所属的带 ScreenComponent 的实体。组件位于 ScreenComponent 的子层级时自动设置。 | - |
anchor? | [number, number, number, number]设置或获取元素锚点,按左、下、右、上指定相对父级的位置,各值范围 0 到 1。[0, 0, 0, 0] 锚定左下角,[1, 1, 1, 1] 锚定右上角。左右或上下值不同时为分离锚点,元素会调整尺寸覆盖对应区域,例如 [0, 0, 1, 1] 与父级尺寸一致。更新时使用 setter。 | - |
batchGroupId? | number设置或获取元素所属的批处理组(BatchGroup),默认 -1,即无分组。 | - |
bottom? | number设置或获取相对锚点底边的距离。结合分离锚点可使元素底边始终与底部相距 bottom 个单位。 | - |
calculatedWidth? | number设置或获取元素实际渲染宽度。通常与 width 相同,但受 LayoutGroupComponent 等布局控制时,calculatedWidth 可能大于或小于编辑器中设置的宽度。 | - |
calculatedHeight? | number设置或获取元素实际渲染高度。通常与 height 相同,但受 LayoutGroupComponent 等布局控制时,calculatedHeight 可能大于或小于编辑器中设置的高度。 | - |
drawOrder? | number设置或获取组件绘制顺序,值越大越显示在其他组件上方。 | - |
height? | number设置或获取编辑器中指定的元素高度。受 LayoutGroupComponent 等控制时,可能不同于实际渲染高度;读取实际高度请使用 calculatedHeight。 | - |
layers? | readonly number[]设置或获取元素所属图层 ID 数组(Layer#id)。不要直接 push、pop、splice 或修改数组,应赋入新数组。 | - |
left? | number设置或获取相对锚点左边的距离。结合分离锚点可让元素左边始终距左侧 left 个单位。 | - |
margin? | [number, number, number, number]设置或获取相对锚点左、下、右、上边缘的距离。若锚点为 [0, 0, 1, 1]、边距为 [0, 0, 0, 0],元素宽高与父级一致。更新边距时使用 setter。 | - |
pivot? | [number, number]设置或获取组件枢轴相对锚点的位置,各值范围 0 到 1。[0, 0] 为左下角,[1, 1] 为右上角。更新时使用 setter。 | - |
right? | number设置或获取相对锚点右边的距离。结合分离锚点可让元素右边始终距右侧 right 个单位。 | - |
top? | number设置或获取相对锚点顶边的距离。结合分离锚点可让元素顶边始终距顶部 top 个单位。 | - |
type? | string设置或获取元素类型。ELEMENTTYPE_GROUP 用于组织布局组,如面板;ELEMENTTYPE_IMAGE 渲染图像;ELEMENTTYPE_TEXT 渲染文字。 | - |
useInput? | boolean设置或获取组件是否接收鼠标与触摸输入事件。 | - |
fitMode? | string设置或获取元素适配模式,仅用于 ELEMENTTYPE_IMAGE。FITMODE_STRETCH 拉伸到元素边界;FITMODE_CONTAIN 保持源纹理或精灵宽高比并完整容纳;FITMODE_COVER 保持宽高比并覆盖整个元素边界。 | - |
width? | number设置或获取编辑器中指定的元素宽度。受 LayoutGroupComponent 等控制时可能不同于实际渲染宽度,读取实际宽度请使用 calculatedWidth。 | - |
fontSize? | number设置或获取字号,单位与元素宽高相同,因此屏幕实际尺寸取决于屏幕空间或世界空间模式。默认 32,仅用于 ELEMENTTYPE_TEXT。 | - |
minFontSize? | number设置或获取 autoFitWidth 或 autoFitHeight 为 true 时可缩放到的最小字号,默认 8。 | - |
maxFontSize? | number设置或获取 autoFitWidth 或 autoFitHeight 为 true 时可缩放到的最大字号,默认 32。 | - |
maxLines? | number | null设置元素最多换行数,剩余文字追加到最后一行。设为 null 表示不限;获取时若无限制则返回 -1。 | - |
autoFitWidth? | boolean设置或获取是否自动缩放字号和行高以适应元素宽度,字号范围为 minFontSize 至 maxFontSize。autoWidth 为 true 时忽略 autoFitWidth。 | - |
autoFitHeight? | boolean设置或获取是否自动缩放字号和行高以适应元素高度,字号范围为 minFontSize 至 maxFontSize。autoHeight 为 true 时忽略 autoFitHeight。 | - |
color? | string设置或获取元素在 sRGB 色彩空间中的颜色,IMAGE 用于图像、TEXT 用于文字。仅使用 RGB,忽略 Alpha,透明度请使用 opacity。更新颜色时使用 setter。 | - |
font? | Font | CanvasFont设置或获取渲染文字的字体,仅适用于 ELEMENTTYPE_TEXT。 | - |
fontAsset? | number | Asset<string> | null设置渲染文字的字体资源,可传 Asset 或资源 ID,仅适用于 ELEMENTTYPE_TEXT。获取时返回字体资源 ID。 | - |
spacing? | number设置或获取文字字距,以默认字符前进量的倍率表示,默认 1。小于 1 更紧凑,大于 1 更疏松,仅用于 ELEMENTTYPE_TEXT。 | - |
lineHeight? | number设置或获取文字行高,单位与 fontSize 相同,但独立于字号,可调整垂直行距。默认 32,仅用于 ELEMENTTYPE_TEXT。 | - |
wrapLines? | boolean设置或获取是否根据元素宽度自动换行。仅适用于 ELEMENTTYPE_TEXT,且 autoWidth 必须为 false。 | - |
justify? | boolean设置或获取是否通过扩展词间距使换行后的文本两端对齐。末行、显式换行结束的行和没有可扩展间隙的行仍按 alignment 对齐。仅用于 ELEMENTTYPE_TEXT,且 wrapLines 为 true、元素宽度固定时有效。 | - |
alignment? | [number, number]设置或获取文字的水平和垂直对齐,范围 0 到 1。[0, 0] 为左下角,[1, 1] 为右上角,仅用于 ELEMENTTYPE_TEXT。 | - |
autoWidth? | boolean设置或获取是否自动将组件宽度设为 textWidth,仅用于 ELEMENTTYPE_TEXT。 | - |
autoHeight? | boolean设置或获取是否自动将组件高度设为 textHeight,仅用于 ELEMENTTYPE_TEXT。 | - |
rtlReorder? | boolean设置或获取是否为从右向左书写的语言重排文字,使用 app.systems.element.registerRtlReorder 注册的函数。 | - |
unicodeConverter? | boolean设置或获取是否转换 Unicode 字符,使用 app.systems.element.registerUnicodeConverter 注册的函数。 | - |
text? | string设置或获取待渲染文本,仅用于 ELEMENTTYPE_TEXT。可用方括号标记覆盖逐字符样式:color 覆盖 color,例如 [color="#ff0000"]red text[/color],绿色和蓝色分别可用 #00ff00、#0000ff;outline 覆盖 outlineColor 和 outlineThickness,例如 [outline color="#ffffff" thickness="0.5"]text[/outline];shadow 覆盖 shadowColor 和 shadowOffset,例如 [shadow color="#ffffff" offset="0.5"]text[/shadow] 或 [shadow color="#000000" offsetX="0.1" offsetY="0.2"]text[/shadow]。只有 enableMarkup 为 true 时才处理这些标记。 | - |
key? | string设置或获取从 Application#i18n 获取本地化文本的键,仅用于 ELEMENTTYPE_TEXT。 | - |
texture? | Texture设置或获取待渲染纹理,仅用于 ELEMENTTYPE_IMAGE。 | - |
textureAsset? | number | Asset<string> | null设置待渲染纹理资源,可传 Asset 或资源 ID,仅用于 ELEMENTTYPE_IMAGE。获取时返回资源 ID。 | - |
material? | Material设置或获取图像渲染使用的材质,仅用于 ELEMENTTYPE_IMAGE。 | - |
materialAsset? | number | Asset<string> | null设置图像渲染使用的材质资源,可传 Asset 或资源 ID,仅用于 ELEMENTTYPE_IMAGE。获取时返回资源 ID。 | - |
sprite? | Sprite设置或获取待渲染精灵,仅用于可显示纹理或精灵的 ELEMENTTYPE_IMAGE。 | - |
spriteAsset? | number | Asset<string> | null设置待渲染精灵资源,可传 Asset 或资源 ID,仅用于可显示纹理或精灵的 ELEMENTTYPE_IMAGE。获取时返回资源 ID。 | - |
spriteFrame? | number设置或获取要渲染的精灵帧,仅用于已指定精灵的 ELEMENTTYPE_IMAGE。 | - |
pixelsPerUnit? | number | null设置或获取每个 PlayCanvas 单位对应的像素数,仅影响使用九宫格或平铺精灵的 ELEMENTTYPE_IMAGE。设为 null 时使用精灵自身的像素单位比。 | - |
opacity? | number设置或获取元素不透明度,适用于 ELEMENTTYPE_IMAGE 和 ELEMENTTYPE_TEXT。 | - |
rect? | Readonly<Vec4> | null设置或获取渲染图像所用纹理区域,以 0 到 1 范围表示 u、v、width、height。仅用于 ELEMENTTYPE_IMAGE,更新区域时使用 setter。 | - |
mask? | boolean设置或获取是否将 Image 元素作为遮罩。遮罩本身不绘制到场景,而是限制子元素仅在其覆盖范围内渲染。 | - |
outlineColor? | string设置或获取文字描边颜色与不透明度,颜色使用 sRGB 空间,仅用于 ELEMENTTYPE_TEXT。 | - |
outlineThickness? | number设置或获取文字描边宽度,范围 0(无描边)到 1(最大厚度),默认 0。结合 outlineColor 设置样式,仅用于 ELEMENTTYPE_TEXT。 | - |
shadowColor? | string设置或获取文字阴影颜色与不透明度,颜色使用 sRGB 空间,仅用于 ELEMENTTYPE_TEXT。 | - |
shadowOffset? | [number, number]设置或获取文字阴影相对文字的偏移。阴影是按 shadowColor 着色的文字副本,各分量范围 -1 到 1,并与字号成比例,因此缩放时保持一致。正 X 向右,正 Y 向上。阴影只绘制在超出字形的部分,默认 [0, 0] 不显示,需非零偏移。仅用于 ELEMENTTYPE_TEXT。 | - |
enableMarkup? | boolean设置或获取是否启用文字标记处理,默认 false,仅用于 ELEMENTTYPE_TEXT。 | - |
rangeStart? | number设置或获取首个渲染字符的索引,仅用于 ELEMENTTYPE_TEXT。 | - |
rangeEnd? | number设置或获取最后一个渲染字符的索引,仅用于 ELEMENTTYPE_TEXT。 | - |
system? | ComponentSystem创建此组件的 ComponentSystem。 | - |
entity? | Entity此组件挂载的 Entity。 | - |
enabled? | boolean设置或获取组件的启用状态。 | - |