1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iOS 13.4.1でA-Frameのvr-modeでカメラが動かない問題の一時対処方法

Last updated at Posted at 2020-05-06

2020/12/08追記
A-Frame v1.1.0 がリリースされましたね。
最新のA-Frameであれば、こちらの対応は不要になります。

2020/05/18追記
CardboardVRDisplayにこちらの修正が入りましたので、1.0.19を使用していれば動作するようになるかと思います。
A-Frameもこちらのissueの中で変更されてるようですので、次のバージョンがリリースされればこちらの変更は不要になるかと思います。

概要

iOS 13.4.1でA-Frameのvr-modeにしたときに画面に映る映像が変わらない場合の一時対処方法です。
A-FrameというよりもCardboardVRDisplayを使用している場合はこちらが発生しているかと思います。
(A-FrameはWebVR PolyfillからCardboardVRDisplayを使用しています。)

再現環境

  • iOS 13.4.1
  • A-Frame v1.0.4(バージョンはそれほど関係ないかと思います)

対処方法

以下のような感じの実装を実行すると(とりあえず)動きます
vrDisplayが初期化されたあと(a-sceneのrenderstartなど)で実行してください。
(CardboardVRDisplayを取得して、FusionSensorをいじっているだけですので、CardboardVRDisplayをそのまま使用している場合は少し置き換えれば動くかと思われます)
私のiPhone 11 Pro(13.4.1)だと動いてますが、動かなかったらすみませんmm

// iOS 13.4.1の判定については色々とあると思いますので、省略です。
const vrDisplay = AFRAME.utils.device.getVRDisplay()
if (!vrDisplay || !vrDisplay.poseSensor_ || !vrDisplay.poseSensor_.fusionSensor) return
const fusionSensor = vrDisplay.poseSensor_.fusionSensor
fusionSensor.stop()
fusionSensor.isWithoutDeviceMotion = true
fusionSensor.start()

何が起こっているかのメモ的な何か

なんで動かないの?

iOS 13.4.1のSafariでDeviceMotionEvent.rotationRateがnullで返ってくるため、CardboardVRDisplayのFusionPoseSensor.prototype.updateDeviceMotion_で例外が発生していました。
(おそらく次のバージョンのiOS Safariではもとに戻っているかと思われます。https://bugs.webkit.org/show_bug.cgi?id=209831)

なんでこんな書き方?

FusionPoseSensorのコンストラクタでDeviceMotionを使用するかの判定が行われて、そのままstart()でEventListenerが登録されますので、stop()で削除して、手動でisWithoutDeviceMotionをtrueにしてstart()することでdeviceorientationで姿勢制御されます。

vr-modeではないときはなぜ動いているのか

A-Frameはdeviceorientationを使用しているからです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?