<pc-element>
<pc-element> 添加界面基础元素组件,通过 type 选择 group、image 或 text,各类型支持的属性不同。
它不是基类或通用包装,而是引擎的二维 UI 组件 entity.element,为宿主提供可绘制图像、文本或不绘制内容的矩形。
通常在 <pc-screen> 上布局,但并非必需,例如文本示例的滚动字幕没有屏幕。没有屏幕祖先时,按实体变换定位,尺寸使用世界单位,32 × 32 就是 32 米,详见无屏幕元素。
用法
- 必须直接位于
<pc-entity>、<pc-model>或<pc-node>下。
备注
图像可绘制纹理或精灵,包括由精灵 <pc-asset> 的 sliced 或 tiled 模式提供的九宫格和平铺,也可作为 mask 裁切后代。只有文本需要 font-asset。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
alignment | Vector2 | "0.5 0.5" | 文本水平和垂直对齐,各分量 0 到 1。0.5 0.5 居中,0 1 左上,仅文本 |
anchor | Vector4 | "0 0 0 0" | 父项上的左、下、右、上锚点,各分量 0 到 1,0 0 0 0 为左下,1 1 1 1 为右上。某轴两值不等则分离,按父项和 margin 拉伸,忽略对应 width 或 height。anchor="0 0 1 1" 配 margin="0 0 0 0" 填满父项,详见锚点 |
auto-fit-height | Boolean | "false" | 从 max-font-size 缩小到 min-font-size 以适应高度,忽略 font-size,需关闭 auto-height,仅文本 |
auto-fit-width | Boolean | "false" | 从 max-font-size 缩小到 min-font-size 以适应宽度,忽略 font-size,需关闭 auto-width,仅文本 |
auto-height | Boolean | "true" | 是否按文本自动调整高度,仅文本 |
auto-width | Boolean | "true" | 是否按文本自动调整宽度,仅文本 |
color | Color | "1 1 1 1" | 图像或文字颜色,与纹理相乘,白纹理可染任意色。Alpha 忽略,透明度请用 opacity |
enable-markup | Boolean | "false" | 是否解析局部样式标签,例如颜色标记,详见标记,仅文本 |
enabled | Boolean | "true" | 组件启用状态 |
fit-mode | Enum | "stretch" | stretch 拉伸填满并忽略比例;contain 保持比例完整容纳;cover 保持比例填满但可能溢出,可用父 mask 裁切,仅图像 |
font-asset | 资源 ID | - | 必须引用 font 类型 <pc-asset>,仅文本必需 |
font-size | Number | "32" | 屏幕单位字号,仅文本 |
height | Number | "32" | 屏幕单位高度,垂直分离锚点或文本 auto-height 时忽略 |
justify | Boolean | "false" | 通过扩大词间距将换行对齐两侧,需 wrap-lines 和固定宽度。最后一行与显式换行行仍遵循 alignment,仅文本 |
letter-spacing | Number | "0" | 类似 CSS letter-spacing,按字号比例附加字间距。0.1 增加字号十分之一,负值收紧,在 spacing 之外叠加,仅文本 |
line-height | Number | "32" | 相邻行基线的屏幕单位距离,不随 font-size 自动变化,增大字号时应同时调整以免重叠,仅文本 |
margin | Vector4 | - | 分离锚点轴上的左、下、右、上边距,正值向内。省略时保留默认 0 0 -32 -32,导致右上各超出 32,因此分离锚点时应显式设置,详见边距 |
mask | Boolean | "false" | 是否按矩形或纹理/精灵不透明形状裁切后代。遮罩自身不显示,color 无效,详见遮罩,仅图像 |
max-font-size | Number | "32" | 自动适配的最大及起始字号,仅文本 |
max-lines | Number | - | 换行的最大行数,剩余文本追加到末行,省略不限制,仅文本 |
min-font-size | Number | "8" | 自动适配最小字号,仅文本 |
opacity | Number | "1" | 不透明度,0 透明,1 不透明,不影响子项 |
outline-color | Color | "0 0 0 1" | 描边颜色,outline-thickness 大于 0 才绘制,仅文本 |
outline-thickness | Number | "0" | 描边厚度,0 无,最大 1,仅文本 |
pivot | Vector2 | "0 0" | 定位、旋转和缩放的轴心,按自身尺寸比例。0 0 为左下,0.5 0.5 为中央 |
pixels-per-unit | Number | - | 覆盖精灵每单位像素数,决定切片或平铺边框宽度。b 像素边框为 b / pixels-per-unit 个屏幕单位。简单精灵直接拉伸,因此此值无效,仅图像 |
shadow-color | Color | "0 0 0 1" | 阴影颜色,shadow-offset 非 0 0 才绘制,仅文本 |
shadow-offset | Vector2 | "0 0" | 阴影 X Y 偏移,范围 -1 到 1,按字号比例。正值向右和上,0 0 不绘制,仅文本 |
spacing | Number | "1" | 正常字间距的倍率,仅文本 |
sprite-asset | 资源 ID | - | 要渲染的精灵 <pc-asset> ID,仅图像 |
sprite-frame | Number | "0" | 精灵帧索引,仅图像 |
text | String | - | 显示文本,仅文本 |
texture-asset | 资源 ID | - | 要渲染的纹理 <pc-asset> ID,仅图像 |
type | Enum | "group" | 元素类型:group、image 或 text |
use-input | Boolean | "false" | 是否接收鼠标、触摸和 XR 并触发事件。按钮、滚动内容拖动和滚动条滑块均需要,详见启用输入 |
width | Number | "32" | 屏幕单位宽度,水平分离锚点或文本 auto-width 时忽略 |
wrap-lines | Boolean | "false" | 是否按元素宽度换行,需要 auto-width=false 或水平分离锚点,仅文本 |
示例
image 面板上放两个 text,第二个启用标记以局部染色。可修改 text、font-size 或面板 color:
<pc-app>
<pc-asset src="https://developer.playcanvas.com/assets/fonts/arial.json" type="font" id="arial"></pc-asset>
<pc-scene>
<pc-entity name="camera">
<pc-camera clear-color="#1d1f2b"></pc-camera>
</pc-entity>
<pc-entity name="ui">
<pc-screen screen-space="true" scale-mode="blend" reference-resolution="640 320"></pc-screen>
<pc-entity name="panel">
<pc-element type="image" anchor="0.5 0.5 0.5 0.5" pivot="0.5 0.5"
width="400" height="150" color="#2a2d36" opacity="0.9"></pc-element>
<pc-entity name="heading" position="0 35 0">
<pc-element type="text" anchor="0.5 0.5 0.5 0.5" pivot="0.5 0.5"
font-asset="arial" font-size="36" text="<pc-element>"></pc-element>
</pc-entity>
<pc-entity name="body" position="0 -25 0">
<pc-element type="text" anchor="0.5 0.5 0.5 0.5" pivot="0.5 0.5"
font-asset="arial" font-size="20" enable-markup="true"
text='Comes in [color="#ff8a3c"]group[/color], [color="#7ab8ff"]image[/color] and [color="#8ce99a"]text[/color] types'></pc-element>
</pc-entity>
</pc-entity>
</pc-entity>
</pc-scene>
</pc-app>
JavaScript 接口
可以通过 ElementComponentElement API创建和操作元素。
component 是底层 ElementComponent,就绪前为 null,其余功能可通过它访问。
另请参阅
<pc-screen>:布局与绘制所用屏幕。<pc-button>:为图像添加交互。<pc-layout-group>:自动排列子元素。<pc-scroll-view>:在视口内滚动内容。- 元素、文本元素和图像元素:锚点、尺寸和显示。