如何构建仅限 XR 的组件

许多组件只在进入 VR 或 AR 会话时才需要。

为了确保在非 xr 会话期间组件不会更新,您可以使用以下代码片段。

import {Component} from '@wonderlandengine/api';

export class ActiveOnlyInVr extends Component {
  static TypeName = 'active-only-in-vr';

  start() {
    this.engine.onXRSessionStart.add(this.onXRSessionStart);
    this.engine.onXRSessionEnd.add(this.onXRSessionEnd);

    /* 会话可能已处于活动状态 */
    this.active = !!this.engine.xr;
  }

  onDestroy() {
    this.engine.onXRSessionStart.remove(this.onXRSessionStart);
    this.engine.onXRSessionEnd.remove(this.onXRSessionEnd);
  }

  update() {
    /* 只有当 xrSession 有效时才调用 */
  }

  onXRSessionStart = s => {
    this.active = true;
  };

  onXRSessionEnd = s => {
    this.active = false;
  };
});

(去)激活其他组件 

如果您希望根据会话状态禁用/启用其他组件,而不更改它们的代码,可以使用 vr-active-mode-switch 组件,根据用户是否处于 XR 会话来禁用/启用组件。