基础组件
World Explorer 支持一组基础组件,这些组件与场景共享定义,并内置支持定位、动画、媒体和世界状态查询
共有五种类型的组件:
除 变换下面将详细说明,所有组件的状态都使用协议缓冲区进行序列化。你可以点击每个标题中的链接查看完整定义。
对象组件
最常见的组件是那些为实体附加视觉和物理属性的组件。它们可用于对游戏对象进行定位、调整大小、绘制以及添加碰撞。
变换 ↗ 规范
为实体添加位置、旋转和缩放。
该组件在场景生命周期中无疑是使用最频繁、更新最频繁的组件。因此, 变换 不会使用协议缓冲区进行序列化,而是打包进自定义结构中。
变换 的大小为 44 字节,具体布局如下:
.-----------------------.-------------------------------.-----------------------.-----------------.
| x | y | z | x | y | z | w | x | y | z | parent (uint32) |
'-----------------------'-------------------------------'-----------------------'-----------------'
╵ 位置 (3x float) ╵ 旋转 (4x float) ╵ 缩放 (3x float) ╵
这种方法使运行时(尤其是在底层代码环境中)能够避免中间的序列化和反序列化步骤。一个 变换 所在的内存可以被复制、共享并直接指向。
坐标可以是小数,因此使用 4 字节浮点数。
该 parent 字段表示该实体应相对于另一个实体定位,后者由其 ID 标识。
由于 parent 的空值也是 根实体 ID(0),因此任何 变换 默认都相对于它。
按协议, 变换 必须以大端字节序序列化。
MeshRenderer ↗ 源码
为实体提供基本渲染行为。
它可以设置为渲染平面、球体、立方体或圆柱体。要渲染任意 3D 形状,请使用 GltfContainer.
MeshCollider ↗ 源码
为实体提供基本碰撞行为和鼠标指针检测。
它可以设置为表现为平面、球体、立方体或圆柱体。要使用自定义碰撞网格,请使用 GltfContainer.
Material ↗ 源码
设置同时具有 MeshRenderer 组件的实体的纹理、光照、颜色和透明度属性。
这是一个设计得能覆盖所有常见情况的复杂结构,但每个字段都有合理的默认值,也可以不指定。
要完全自定义实体的视觉属性,请使用 GltfContainer.
GltfContainer ↗ 源码
为此实体附加一个 3D 模型,给定 文件路径 状态 .gltf 场景清单中的资源。
由于该模型有自己的网格和材质,此组件会覆盖来自 MeshRenderer, MeshCollider 和 Material.
Billboard ↗ 源码
使实体自动重新调整其 变换 朝向摄像机,或者可选地朝向通过 target_entity引用的另一个实体。顾名思义,它用于显示游戏内的广告牌,并经常与 TextShape.
默认情况下它会影响所有方向,但也可以设置为仅绕一个轴旋转。如果引用的目标实体不存在,则会暂停重新朝向,直到它出现。
Animator ↗ 源码
定义一个或多个可同时应用于实体的动画。
场景可以设置组件状态来自定义、播放以及在动画之间切换,也可以读取它来检查哪些动画可用或当前正在播放。
AvatarAttach ↗ 源码
表示实体的位置必须跟随头像身体中的某个特定锚点。
通过设置用户 ID,它可以影响任何头像,而不仅仅是玩家自己的头像。
TextShape ↗ 源码
根据其 变换.
它高度可配置,支持大小、边距、内边距、颜色、阴影等参数。
可见性 ↗ 源码
设置实体是可见(默认)还是不可见。
不可见对象仍然存在,并且会表现出任何其他附加组件的行为。
AvatarShape ↗ 源码
包含玩家头像的信息,包括其身体形状、颜色、穿戴物品和过渡状态。
此组件附加到 头像场景.
游戏组件
某些基础组件可供场景和运行时用于交换信息。它们利用 ECS 同步机制 来保证任何状态更改或事件的一致性和顺序。
CameraMode ↗ 源码
可用于确定玩家是第一人称还是第三人称视角。
PointerLock ↗ 源码
可用于确定鼠标指针是否自动跟随摄像机焦点(锁定),或者可以在屏幕上自由移动(未锁定)。
它附加到 摄像机实体,其状态可以从场景中读取(但不能写入)。
PointerEvents ↗ 源码
当指针点击或悬停在实体上时显示视觉反馈。
PointerEventsResult ↗ 源码
包含来自玩家的近期输入信息,包括按键和指针操作。
它附加到 根实体,并由运行时在每一帧用任何新事件更新。
Raycast ↗ 源码
可以附加到实体上,以便向游戏引擎请求一次射线投射。 RaycastResult 组件随后会附加到同一个实体上。
射线的起点、方向和最大长度都可以配置。
RaycastResult ↗ 源码
由运行时附加到具有一个 Raycast 组件且结果待定的实体上。
它包含原始射线的信息,并标识出任何被击中的实体。
媒体组件
场景可以附加特殊组件来显示图像、展示视频或播放声音。
AudioSource ↗ 源码
播放随场景打包的音频片段,给定 其清单中的文件路径.
声音来源于关联实体的位置。其音调、音量和循环行为都可设置,并且可以读取音频播放器的状态。
AudioStream ↗ 源码
类似于 AudioSource,但音频是从外部 URL 实时流式传输的。
尽管附加到了特定实体上,但声音不受其位置影响。其音量可设置,并且可以读取音频播放器的状态。
NftShape ↗ 源码
显示与图像或视频资源相关联的 NFT。
它渲染一个带有可配置装饰边框的 2D 画布。
区域组件
这些组件允许场景修改指定范围内实体的默认行为。
AvatarModifierArea ↗ 源码
更改以实体为中心的空间内头像的行为。
它使用一个 3D 尺寸向量定义,并可影响头像是否可见或可点击。可根据用户 ID 将特定头像排除在此效果之外。
CameraModeArea ↗ 源码
更改以实体为中心的空间内的摄像机模式(第一人称或第三人称)。
它使用一个 3D 尺寸向量和所需的摄像机模式进行定义。
UI 组件
以下组件用于创建悬浮在游戏世界上方的图形界面。
它们通常附加到具有层级关系的实体集合上,这些集合具有 UiTransform 组件,并通过 parent 属性相互关联。
例如,一个浮动的选项窗口可以是一个带有 UiTransform 和一个 UiBackground 组件的实体,再加上一个带有子级 UiTransform 和一个 UiDropdown.
UiTransform ↗ 源码
描述 UI 组件的大小、定位、边距和内边距。
它基于 flexbox 模型,并且高度可定制。
UiBackground ↗ 源码
描述在 UI 实体中用作背景的颜色或纹理。
UiDropdown ↗ 源码
定义一个将在下拉控件中显示的互斥选项列表。
UiDropdownResult ↗ 源码
包含来自一个 UiDropdown的所选值,由运行时设置并由场景读取。
UiInput ↗ 源码
定义一个文本输入控件,并带有一些可自定义的边距。
UiInputResult ↗ 源码
包含一个 UiInput的所选值,由运行时设置并由场景读取。
UiText ↗ 源码
定义一个简单的文本视图,并带有一些可自定义的边距。
最后更新于