JavaScript 组件

8thwall-camera 

8thwall 相机组件。

已弃用: 请使用 https://github.com/WonderlandEngine/wonderland-ar-tracking 上的组件。

ParamTypeDescription
deprecatedbool

anchor 

将对象的位置设置为 XRAnchor 的位置。

使用 Anchor.create() 静态函数创建锚点。

与光标一起使用的示例:

1cursorTarget.onClick.add((object, cursor, originalEvent) => {
2    /* 只有在 XR 中的事件才会附加一个框架 */
3    if(!originalEvent.frame) return;
4    Anchor.create(anchorObject, {uuid: id, persist: true}, originalEvent.frame);
5});
ParamTypeDescription
persistbool
uuidstring用于加载持久锚点的唯一标识符,如果未知则为空/空值

audio-listener 

表示 Wonderland 的音频监听器组件。 更新 WebAudio 监听器实例的位置和方向。

注意: 每次仅应激活一个监听器。

audio-source 

表示 Wonderland 引擎中的音频源,允许播放音频文件。

cursor 

适用于桌面/移动设备/VR 的 3D 光标。

在场景中实现一个光线投射光标。要对点击/悬停/取消悬停/光标按下/光标释放进行响应,请使用 cursor-target

对于 VR,光线以 this.object.getForward() 的方向投射。对于桌面和移动设备,前向矢量被反向投影以考虑用户在屏幕上点击的位置。

.globalTarget 可用于调用所有对象的回调,即使那些没有附加光标目标但符合碰撞组的对象。

.hitTestTarget 可用于调用 WebXR 命中测试结果的回调,

参见 动画示例

ParamTypeDescription
collisionGroupint光线投射的碰撞组。只有在此组中的对象才会受此光标影响。
cursorObjectobject(可选)可视化光标命中位置的对象。
cursorRayObjectobject(可选)用于可视化光标射线的对象。
cursorRayScalingAxisenum用于缩放 cursorRayObject 的轴。
handednessenumVR 光标的持握方向,仅接受相应控制器的触发事件。
maxDistancefloat光标光线投射的最大距离。
rayCastModeenum光线投射的模式,是否使用 PhysX 或简单碰撞组件
styleCursorbool是否在桌面上设置鼠标光标的 CSS 样式
useWebXRHitTestbool如果可用,使用 WebXR 命中测试。

将一个命中测试位置组件附件到 cursorObject 上,光标会使用该对象向 hitTestTarget 发送与 HitTestResult 对应的事件。|

cursor-target 

cursor 的 点击/悬停/移动/按钮目标。

要在点击、悬停、取消悬停、移动光标、按下光标按钮或释放光标按钮时触发代码,请分别使用 .addClickFunction(f).addHoverFunction(f).addUnHoverFunction(f).addMoveFunction(f).addDownFunction(f).addUpFunction(f) 以及任何 function f() {}

要调用不同组件上的成员,可以按如下方式设置光标目标:

1start: function() {
2  let target = this.object.addComponent('cursor-target');
3  target.onClick.add(this.onClick.bind(this));
4},
5onClick: function() {
6  console.log(this.object.name, "被点击了!");
7}

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 

打印一些关于对象的有限调试信息。

信息包括:此对象的名称、对象参数的名称、对象的世界平移、世界变换和局部变换。

主要用于引擎开发者进行调试目的或作为示例代码。

ParamTypeDescription
objobject要打印名称的第二个对象

device-orientation-look 

从移动设备检索设备方向并相应设置对象的方向。

适用于魔法窗口体验。

finger-cursor 

0.8.5+

允许通过碰撞重叠与光标目标进行交互, 例如在跟踪手指顶端。

Requirements:

  • 同一对象上的一个碰撞组件(通常为 0.05 半径的球体)

fixed-foveation 

一旦 WebXR 会话开始,就应用 fixed foveation

固定注视减少了用户视觉边缘的着色成本,通过在用户视野边缘以较低分辨率渲染。

ParamTypeDescription
fixedFoveationfloat应用的量,从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 中。

参见 手部跟踪示例

ParamTypeDescription
controllerToDeactivateobject如果没有可用姿势则激活的控制器对象及其子项
deactivateChildrenWithoutPosebool如果没有追踪到姿势则停用子项
handSkinskin(optional) 应用追踪到的关节姿势的皮肤。如果不存在,将使用关节球体进行显示。
handednessenum持握方向决定是接收来自右手还是左手的追踪输入
jointMaterialmaterial用于显示的材质。应用于生成的蒙皮网格或关节球体。
jointMeshmesh(optional) 用于可视化关节的网格

hit-test-location 

设置 WebXR Device API “Hit Test” 并将对象放置于命中位置。

Requirements:

  • 在您的 HTML 文件中的 AR 按钮上指定 'hit-test' 为必需或可选功能。 参见 Wastepaperbin AR 作为示例。
ParamTypeDescription
scaleObjectbool为了保持向后兼容性:是否缩放对象到0再返回。

已弃用: 请改用 onHitLost 和 onHitFound。|

image-texture 

从 URL 下载图像并将其作为 diffuseTextureflatTexture 应用于附加的网格组件。

支持以下着色器的材质:

  • “Phong Opaque Textured”
  • “Flat Opaque Textured”
  • “Background”
  • “Physical Opaque Textured”
  • “Foliage”
ParamTypeDescription
materialmaterial应用视频纹理的材质
texturePropertystring要设置的纹理属性名称
urlstring要下载图像的 URL

input-profile 

动态加载和映射 XR 控制器的输入配置。

ParamTypeDescription
addVrModeSwitchbool如果为 true,则向加载的控制器模型添加 VR 模式切换组件。
customBasePathstring可选的文件夹路径,用于加载自定义的 XR 输入配置。
defaultBasePathstring存储 XR 输入配置的基本路径。
defaultControllerobject当自定义模型无法加载时使用的默认3D控制器模型。
handednessenum表示控制器持握方向的索引(左为0,右为1)。
mapToDefaultControllerbool如果为 true,输入配置将映射到默认控制器,不会加载动态的控制器3D模型。
trackedHandobject添加了 HandTracking 组件的对象。

mouse-look 

通过鼠标移动控制相机方向。

高效实现,仅在鼠标移动时影响对象方向。

ParamTypeDescription
mouseButtonIndexint如果启用了“moveOnClick”,则应按住的鼠标按钮以控制视图
pointerLockOnClickbool在 canvas 上的“mousedown”事件上启用指针锁
requireMouseDownbool需要按住鼠标按钮以控制视图。
否则视图将始终跟随鼠标移动
sensitityfloat鼠标观察灵敏度

orbital-camera 

OrbitalCamera 组件允许用户围绕目标点(即对象自身的位置)旋转。它以指定的距离旋转。

备注: 该组件通过鼠标或触摸工作。因此在 VR 中不起作用。

ParamTypeDescription
dampingfloat
maxElevationfloat
maxZoomfloat
minElevationfloat
minZoomfloat
mouseButtonIndexint
radialfloat
xSensitivityfloat
ySensitivityfloat
zoomSensitivityfloat

plane-detection 

使用 WebXR Device API - Plane Detection 为 XRPlanes 创建网格和碰撞。

ParamTypeDescription
collisionMaskint要分配给新创建的碰撞组件的碰撞掩码,或为负值如果不应创建碰撞组件。
planeMaterialmaterial要分配给创建的平面网格的材质,或为 null 如果不应创建网格。

player-height 

设置玩家高度,使其在“本地”和“查看者”参考空间的地面上方有一个Y偏移。

ParamTypeDescription
heightfloat

target-framerate 

设置目标帧率

更新目标帧率 到最接近给定 framerate支持的目标帧率

目标帧率用于设备的 VR 合成器,指示以多常的间隔刷新屏幕。这意味着应用程序将被要求以更规律的间隔生成帧,可能在掉帧的情况下花费更少的时间。

对于负荷较重的应用程序,设置符合的目标帧率可以改善应用程序的渲染稳定性并减少卡顿。

同样,对于较简单的应用程序,目标帧率也可以用于在 Oculus Quest 2 上启用 120Hz 刷新率。

ParamTypeDescription
frameratefloat

teleport 

VR 位移传送。

参见 传送示例

ParamTypeDescription
cam?非 VR 使用的摄像机
camRoot?玩家根,对象将在传送时定位于其上。
eyeLeft?VR 使用的左眼
eyeRight?VR 使用的右眼
floorGroup?可传送的“地面”对象的碰撞组
handedness?VR 光标的持握方向,仅接受相应控制器的触发事件。
indicatorYOffset?应用于指示器对象的偏移量,例如避免与地板发生 Z-fighting
maxDistance?PhysX 光线投射的最大距离
rayCastMode?光线投射的模式,是否使用 PhysX 或简单碰撞组件
teleportIndicatorMeshObject?将作为指示器放置在玩家传送目标的对象。
thumbstickActivationThreshhold?摇杆需推动多远才能显示传送目标指示灯
thumbstickDeactivationThreshhold?摇杆需释放多远才能执行传送

trail 

基于动态网格的轨迹

此组件跟踪附加对象的世界位置。 在固定间隔中,世界位置被存储为轨迹段的起点和终点。

轨迹在其长度上逐渐变细。UV 纹理坐标被设置以便 U 轴覆盖轨迹的宽度,V 轴覆盖轨迹的长度。 这样就可以使用纹理定义轨迹的外观。

ParamTypeDescription
intervalfloat记录新点之前的时间间隔
materialmaterial应用于轨迹网格的材质
resetThresholdfloat超过该秒数即重置轨迹的最大时间差。这可以防止当更新发生得不频繁时(例如,标签没有焦点时)轨迹的跳动。
segmentsint轨迹网格中的段数
taperbool轨迹是否逐渐变细
widthfloat轨迹的宽度(在世界空间中)

two-joint-ik-solver 

双关节链的逆向运动学(例如膝盖或肘部)

ParamTypeDescription
copyTargetRotation?标志用于从目标复制旋转到结束
end?附加到中间的骨骼
helper?用于确定关节旋转轴的辅助对象
middle?附加到根的骨骼
root?根骨骼,绝不移动
target?关节应该到达的目标

video-texture 

从 URL 下载视频,并将其作为 diffuseTextureflatTexture 应用于指定材质。

视频纹理需要在有新帧可用时定期更新。 此组件处理新帧的检测并更新纹理以反映视频的当前帧。

支持以下着色器的材质:

  • “Phong Opaque Textured”
  • “Flat Opaque Textured”
  • “Background”
  • “Physical Opaque Textured”
  • “Foliage”

可以通过 this.video 访问视频:

1  let videoTexture = this.object.getComponent('video-texture');
2  videoTexture.video.play();
3  videoTexture.video.pause();

参见 视频示例

ParamTypeDescription
autoplaybool是否自动开始播放视频
loopbool是否循环视频
materialmaterial要应用视频纹理的材质
mutedbool是否静音
texturePropertystring要设置的纹理属性名称
urlstring要下载视频的 URL

vr-mode-active-switch 

根据 VR/AR 会话是否激活来切换对象上的所有其他组件为活动/不活动。

对于在用户进入 VR 前隐藏控制器等应用场景非常有用。

ParamTypeDescription
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_springBoneVRMC_node_constraint 扩展都支持。

限制:

  • 不支持 VRMC_material_mtoon
  • 不支持表情
  • 不支持基于表情的 LookAt
  • Mesh annotation 模式 auto 不支持(第一人称模式)
ParamTypeDescription
lookAtTarget?VRM 所看的对象
src?要加载的 VRM 文件的 URL

wasd-controls 

使用 W/A/S/D 键的基本移动。

ParamTypeDescription
headObjectobject用于确定前进方向的对象的方向
lockYbool仅在全局 x 和 z 平面上移动对象的标志
speedfloat以 m/s 为单位的移动速度。