Babylon.jsのWebXR Hit Test FeatureでtestOnPointerDownOnlyフラグが効いていないかもしれないので調査
Hit Testをtransientモードで使っているときに、なぜかtestOnPointerDownOnly
フラグが機能していない気がする
このフラグはIWebXRHitTestOptionLegacy
インターフェースから継承されているもので、
HitTestLegacyの場合は考慮されている形跡があるものの、
HitTestでは何も記述されていないっぽい気がする
とりまbabylonjsをfork
babylonのビルド、node14-npm6.xの組み合わせでやったらエラーが出たけど、
nvm for Windows使ってnode16-npm8.xの組み合わせにしたら環境構築に成功した
ここら辺参照
WebXRHitTestとWebXRHitTestLegacyの実装を見比べてみる。
これらはどちらも、WebXRAbstractFeature抽象クラスを継承し、IWebXRHitTestFeatureインターフェースを実装している
IWebXRHitTestFeatureインターフェースはジェネリクスでhitTestの結果を返すResultの型を指定できる
今回の焦点になっているのはonHitTestResultObservable
というイベントなので、
それを内部でどのようにinvokeしているかを探ってみる
WebXRHitTestLegacyでは、
permanentモードの場合はそもそもlegacyの場合はpermanentとtransientの区別ではなさそう
_onXRFrame()内でWebXRHitTestLegacy.XRHitTestWithRay
という
非同期なstatic関数が呼び出される
その結果を受け取って、_onHitTestResults()関数が呼び出され、
その中でonHitTestResultObservable.notifyによって発火する
testOnPointerDownOnlyがtrueの場合、
attach()の時点でXRSession.addEventListner()
でイベント登録される
ユースケースに関する文書があった
もしかしたら自分が目標にしていたのはselect_startとかだったのかもしれない
これまでの調査で、
- HitTestOptionsはlegacyを継承している
- しかしkegacyで使われていたtestOnPointerDownOnlyフラグは考慮されていないというか別のシステムに置き換わっている
- しかしその命名のせいで誤解が生じている
- オプションを廃止するかselect_starのときにのみ発火する実装にするかの提案がしたい
ということで、ここからは挙動の提案をすべく
そのための実装を進めていきたい
具体的には、testOnPointerDownOnly
フラグが立っているときは
スクリーンをタッチした瞬間のみ発火するように実装する
Android Chrome上で動作しているWebアプリをvscodeでデバッグするためのvscode拡張
これはWebARで使うとめっちゃ良さそう
npmパケのコード書くってことをしたことないのだけど、
今回の場合はこの yarn linkでシンボリックリンクを作成するのが良さそう
これも参考に
yarn add link:<path>
もあるのか
Babylon.js/packages/dev/core
に移動してyarn build
したうえでyarn link
すると@dev/core
なる名前でSymLinkが作成された
これを作業ディレクトリでyarn link "@dev/core"
することでインポート出来た。なるほど