JavaScript 组件
8thwall-camera
8thwall 相机组件。
已弃用: 请使用 https://github.com/WonderlandEngine/wonderland-ar-tracking 上的组件。
Param | Type | Description |
---|---|---|
deprecated | bool |
anchor
将对象的位置设置为 XRAnchor 的位置。
使用 Anchor.create()
静态函数创建锚点。
与光标一起使用的示例:
Param | Type | Description |
---|---|---|
persist | bool | |
uuid | string | 用于加载持久锚点的唯一标识符,如果未知则为空/空值 |
audio-listener
表示 Wonderland 的音频监听器组件。 更新 WebAudio 监听器实例的位置和方向。
注意: 每次仅应激活一个监听器。
audio-source
表示 Wonderland 引擎中的音频源,允许播放音频文件。
cursor
适用于桌面/移动设备/VR 的 3D 光标。
在场景中实现一个光线投射光标。要对点击/悬停/取消悬停/光标按下/光标释放进行响应,请使用 cursor-target。
对于 VR,光线以 this.object.getForward() 的方向投射。对于桌面和移动设备,前向矢量被反向投影以考虑用户在屏幕上点击的位置。
.globalTarget
可用于调用所有对象的回调,即使那些没有附加光标目标但符合碰撞组的对象。
.hitTestTarget
可用于调用 WebXR 命中测试结果的回调,
参见 动画示例。
Param | Type | Description |
---|---|---|
collisionGroup | int | 光线投射的碰撞组。只有在此组中的对象才会受此光标影响。 |
cursorObject | object | (可选)可视化光标命中位置的对象。 |
cursorRayObject | object | (可选)用于可视化光标射线的对象。 |
cursorRayScalingAxis | enum | 用于缩放 cursorRayObject 的轴。 |
handedness | enum | VR 光标的持握方向,仅接受相应控制器的触发事件。 |
maxDistance | float | 光标光线投射的最大距离。 |
rayCastMode | enum | 光线投射的模式,是否使用 PhysX 或简单碰撞组件 |
styleCursor | bool | 是否在桌面上设置鼠标光标的 CSS 样式 |
useWebXRHitTest | bool | 如果可用,使用 WebXR 命中测试。 |
将一个命中测试位置组件附件到 cursorObject 上,光标会使用该对象向 hitTestTarget 发送与 HitTestResult 对应的事件。|
cursor-target
cursor 的 点击/悬停/移动/按钮目标。
要在点击、悬停、取消悬停、移动光标、按下光标按钮或释放光标按钮时触发代码,请分别使用 .addClickFunction(f)
、
.addHoverFunction(f)
、.addUnHoverFunction(f)
、
.addMoveFunction(f)
、.addDownFunction(f)
和
.addUpFunction(f)
以及任何 function f() {}
。
要调用不同组件上的成员,可以按如下方式设置光标目标:
Functions:
1const target = this.object.getComponent(CursorTarget);
2const callback = function(object, cursorComponent) {};
3
4target.onHover.add(callback);
5target.onHover.remove(callback);
6
7target.onUnHover.add(callback);
8target.onUnHover.remove(callback);
9
10target.onClick.add(callback);
11target.onClick.remove(callback);
12
13target.onMove.add(callback);
14target.onMove.remove(callback);
15
16target.onDown.add(callback);
17target.onDown.remove(callback);
18
19target.onUp.add(callback);
20target.onUp.remove(callback);
Requirements:
- 需要在同一对象上附加一个
collision
组件。
参见 动画示例。
debug-object
打印一些关于对象的有限调试信息。
信息包括:此对象的名称、对象参数的名称、对象的世界平移、世界变换和局部变换。
主要用于引擎开发者进行调试目的或作为示例代码。
Param | Type | Description |
---|---|---|
obj | object | 要打印名称的第二个对象 |
device-orientation-look
从移动设备检索设备方向并相应设置对象的方向。
适用于魔法窗口体验。
finger-cursor
0.8.5+允许通过碰撞重叠与光标目标进行交互, 例如在跟踪手指顶端。
Requirements:
- 同一对象上的一个碰撞组件(通常为
0.05
半径的球体)
fixed-foveation
一旦 WebXR 会话开始,就应用 fixed foveation
固定注视减少了用户视觉边缘的着色成本,通过在用户视野边缘以较低分辨率渲染。
Param | Type | Description |
---|---|---|
fixedFoveation | float | 应用的量,从0(无)到1(满) |
hand-tracking
通过 WebXR Device API 实现的简单手部跟踪 “Hand Input” API。
允许显示手部为球体关节或蒙皮网格。
要对抓取作出反应,请使用 this.isGrabbing()
。有关其他手势,请参考 this.joints
- 一个 Object3D 数组,并使用 [WebXR 手部输入规范]中列出的关节索引 (https://immersive-web.github.io/webxr-hand-input/#skeleton-joints-section)。
通常希望使用手部跟踪或控制器,而不是两者兼具。
此组件提供 deactivateChildrenWithoutPose
用于在无法获得姿势时隐藏手部跟踪可视化,以及 controllerToDeactivate
用于在获得手部跟踪姿势后禁用另一个物体。
在 XR 会话之外,既不启用也不禁用跟踪或控制器,以便与 vr-mode-active-switch 组件良好配合。
Requirements:
- 要使用手部跟踪,请在 Oculus Quest/Oculus Quest 2 上的 Oculus 浏览器中启用 “joint tracking” 在
chrome://flags
中。
参见 手部跟踪示例。
Param | Type | Description |
---|---|---|
controllerToDeactivate | object | 如果没有可用姿势则激活的控制器对象及其子项 |
deactivateChildrenWithoutPose | bool | 如果没有追踪到姿势则停用子项 |
handSkin | skin | (optional) 应用追踪到的关节姿势的皮肤。如果不存在,将使用关节球体进行显示。 |
handedness | enum | 持握方向决定是接收来自右手还是左手的追踪输入 |
jointMaterial | material | 用于显示的材质。应用于生成的蒙皮网格或关节球体。 |
jointMesh | mesh | (optional) 用于可视化关节的网格 |
hit-test-location
设置 WebXR Device API “Hit Test” 并将对象放置于命中位置。
Requirements:
- 在您的 HTML 文件中的 AR 按钮上指定
'hit-test'
为必需或可选功能。 参见 Wastepaperbin AR 作为示例。
Param | Type | Description |
---|---|---|
scaleObject | bool | 为了保持向后兼容性:是否缩放对象到0再返回。 |
已弃用: 请改用 onHitLost 和 onHitFound。|
image-texture
从 URL 下载图像并将其作为 diffuseTexture
或 flatTexture
应用于附加的网格组件。
支持以下着色器的材质:
- “Phong Opaque Textured”
- “Flat Opaque Textured”
- “Background”
- “Physical Opaque Textured”
- “Foliage”
Param | Type | Description |
---|---|---|
material | material | 应用视频纹理的材质 |
textureProperty | string | 要设置的纹理属性名称 |
url | string | 要下载图像的 URL |
input-profile
动态加载和映射 XR 控制器的输入配置。
Param | Type | Description |
---|---|---|
addVrModeSwitch | bool | 如果为 true,则向加载的控制器模型添加 VR 模式切换组件。 |
customBasePath | string | 可选的文件夹路径,用于加载自定义的 XR 输入配置。 |
defaultBasePath | string | 存储 XR 输入配置的基本路径。 |
defaultController | object | 当自定义模型无法加载时使用的默认3D控制器模型。 |
handedness | enum | 表示控制器持握方向的索引(左为0,右为1)。 |
mapToDefaultController | bool | 如果为 true,输入配置将映射到默认控制器,不会加载动态的控制器3D模型。 |
trackedHand | object | 添加了 HandTracking 组件的对象。 |
mouse-look
通过鼠标移动控制相机方向。
高效实现,仅在鼠标移动时影响对象方向。
Param | Type | Description |
---|---|---|
mouseButtonIndex | int | 如果启用了“moveOnClick”,则应按住的鼠标按钮以控制视图 |
pointerLockOnClick | bool | 在 canvas 上的“mousedown”事件上启用指针锁 |
requireMouseDown | bool | 需要按住鼠标按钮以控制视图。 |
否则视图将始终跟随鼠标移动 | ||
sensitity | float | 鼠标观察灵敏度 |
orbital-camera
OrbitalCamera 组件允许用户围绕目标点(即对象自身的位置)旋转。它以指定的距离旋转。
备注: 该组件通过鼠标或触摸工作。因此在 VR 中不起作用。
Param | Type | Description |
---|---|---|
damping | float | |
maxElevation | float | |
maxZoom | float | |
minElevation | float | |
minZoom | float | |
mouseButtonIndex | int | |
radial | float | |
xSensitivity | float | |
ySensitivity | float | |
zoomSensitivity | float |
plane-detection
使用 WebXR Device API - Plane Detection 为 XRPlanes 创建网格和碰撞。
Param | Type | Description |
---|---|---|
collisionMask | int | 要分配给新创建的碰撞组件的碰撞掩码,或为负值如果不应创建碰撞组件。 |
planeMaterial | material | 要分配给创建的平面网格的材质,或为 null 如果不应创建网格。 |
player-height
设置玩家高度,使其在“本地”和“查看者”参考空间的地面上方有一个Y偏移。
Param | Type | Description |
---|---|---|
height | float |
target-framerate
设置目标帧率
更新目标帧率
到最接近给定 framerate
的 支持的目标帧率。
目标帧率用于设备的 VR 合成器,指示以多常的间隔刷新屏幕。这意味着应用程序将被要求以更规律的间隔生成帧,可能在掉帧的情况下花费更少的时间。
对于负荷较重的应用程序,设置符合的目标帧率可以改善应用程序的渲染稳定性并减少卡顿。
同样,对于较简单的应用程序,目标帧率也可以用于在 Oculus Quest 2 上启用 120Hz 刷新率。
Param | Type | Description |
---|---|---|
framerate | float |
teleport
VR 位移传送。
参见 传送示例。
Param | Type | Description |
---|---|---|
cam | ? | 非 VR 使用的摄像机 |
camRoot | ? | 玩家根,对象将在传送时定位于其上。 |
eyeLeft | ? | VR 使用的左眼 |
eyeRight | ? | VR 使用的右眼 |
floorGroup | ? | 可传送的“地面”对象的碰撞组 |
handedness | ? | VR 光标的持握方向,仅接受相应控制器的触发事件。 |
indicatorYOffset | ? | 应用于指示器对象的偏移量,例如避免与地板发生 Z-fighting |
maxDistance | ? | PhysX 光线投射的最大距离 |
rayCastMode | ? | 光线投射的模式,是否使用 PhysX 或简单碰撞组件 |
teleportIndicatorMeshObject | ? | 将作为指示器放置在玩家传送目标的对象。 |
thumbstickActivationThreshhold | ? | 摇杆需推动多远才能显示传送目标指示灯 |
thumbstickDeactivationThreshhold | ? | 摇杆需释放多远才能执行传送 |
trail
基于动态网格的轨迹
此组件跟踪附加对象的世界位置。 在固定间隔中,世界位置被存储为轨迹段的起点和终点。
轨迹在其长度上逐渐变细。UV 纹理坐标被设置以便 U 轴覆盖轨迹的宽度,V 轴覆盖轨迹的长度。 这样就可以使用纹理定义轨迹的外观。
Param | Type | Description |
---|---|---|
interval | float | 记录新点之前的时间间隔 |
material | material | 应用于轨迹网格的材质 |
resetThreshold | float | 超过该秒数即重置轨迹的最大时间差。这可以防止当更新发生得不频繁时(例如,标签没有焦点时)轨迹的跳动。 |
segments | int | 轨迹网格中的段数 |
taper | bool | 轨迹是否逐渐变细 |
width | float | 轨迹的宽度(在世界空间中) |
two-joint-ik-solver
双关节链的逆向运动学(例如膝盖或肘部)
Param | Type | Description |
---|---|---|
copyTargetRotation | ? | 标志用于从目标复制旋转到结束 |
end | ? | 附加到中间的骨骼 |
helper | ? | 用于确定关节旋转轴的辅助对象 |
middle | ? | 附加到根的骨骼 |
root | ? | 根骨骼,绝不移动 |
target | ? | 关节应该到达的目标 |
video-texture
从 URL 下载视频,并将其作为 diffuseTexture
或 flatTexture
应用于指定材质。
视频纹理需要在有新帧可用时定期更新。 此组件处理新帧的检测并更新纹理以反映视频的当前帧。
支持以下着色器的材质:
- “Phong Opaque Textured”
- “Flat Opaque Textured”
- “Background”
- “Physical Opaque Textured”
- “Foliage”
可以通过 this.video
访问视频:
参见 视频示例。
Param | Type | Description |
---|---|---|
autoplay | bool | 是否自动开始播放视频 |
loop | bool | 是否循环视频 |
material | material | 要应用视频纹理的材质 |
muted | bool | 是否静音 |
textureProperty | string | 要设置的纹理属性名称 |
url | string | 要下载视频的 URL |
vr-mode-active-switch
根据 VR/AR 会话是否激活来切换对象上的所有其他组件为活动/不活动。
对于在用户进入 VR 前隐藏控制器等应用场景非常有用。
Param | Type | Description |
---|---|---|
activateComponents | ? | 组件应在 VR 中还是非 VR 中处于活动状态 |
affectChildren | ? | 是否应影响子对象的组件 |
vrm
用于加载和处理 VRM 1.0 模型的组件。
模型的姿势应完全通过旋转骨骼来完成。可以使用.bones
属性访问这些属性,并遵循 VRM 骨骼命名。请注意,并非所有 VRM 模型都具备所有可能的骨骼。默认姿势(T 型姿势)被保存在 .restPose
属性中。可按以下方式重置骨骼到其默认姿势:
1vrmComponent.bones[vrmBoneName].rotationLocal = vrmComponent.restPose[vrmBoneName];
通过移动该组件附加的对象来在世界中移动模型。换言之,移动 VRM 模型的根部。骨骼及任何后代对象不应用于移动 VRM 模型。
核心扩展 VRMC_vrm
以及 VRMC_springBone
和 VRMC_node_constraint
扩展都支持。
限制:
- 不支持
VRMC_material_mtoon
- 不支持表情
- 不支持基于表情的 LookAt
- Mesh annotation 模式
auto
不支持(第一人称模式)
Param | Type | Description |
---|---|---|
lookAtTarget | ? | VRM 所看的对象 |
src | ? | 要加载的 VRM 文件的 URL |
wasd-controls
使用 W/A/S/D 键的基本移动。
Param | Type | Description |
---|---|---|
headObject | object | 用于确定前进方向的对象的方向 |
lockY | bool | 仅在全局 x 和 z 平面上移动对象的标志 |
speed | float | 以 m/s 为单位的移动速度。 |