tag:crieit.net,2005:https://crieit.net/tags/OculusQuest/feed 「OculusQuest」の記事 - Crieit Crieitでタグ「OculusQuest」に投稿された最近の記事 2019-07-28T23:30:51+09:00 https://crieit.net/tags/OculusQuest/feed tag:crieit.net,2005:PublicArticle/15285 2019-07-28T23:30:51+09:00 2019-07-28T23:30:51+09:00 https://crieit.net/posts/aframe-super-keyboard-VR aframe-super-keyboardをVR内で動作させる <p>A-FrameのVR内で文字を入力させたいと思い探してみると<a target="_blank" rel="nofollow noopener" href="https://github.com/supermedium/aframe-super-keyboard">aframe-super-keyboard</a>というものが見つかった。しかし試してみるとどうもVR内ではうまく動かない。よく見るとデモもブラウザ上でしか動いていない。</p> <p>一応なんとか動かせたのでそのメモ。</p> <p><a href="https://crieit.now.sh/upload_images/9b96c3d4b9b876ae035fecd6b003731b5d3dae56e94fb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9b96c3d4b9b876ae035fecd6b003731b5d3dae56e94fb.png?mw=700" alt="" /></a></p> <h2 id="handを指定する"><a href="#hand%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B">handを指定する</a></h2> <p>super-keyboardコンポーネントの属性にhandというプロパティがある。これはデフォルトでは</p> <pre><code>[cursor], [vive-controls], [tracked-controls], [oculus-touch-controls], [windows-motion-controls], [hand-controls], [daydream-controls] [cursor] > [raycaster] </code></pre> <p>となっている。</p> <p>ということでもしかしたらデモも動く場合があるのかもしれない。ただ、コントローラのraycasterの階層の仕様が違ったり自分でraycasterを作っている場合は動かないので、ここを指定してあげる必要がある。</p> <p>僕の場合もraycasterを自分で定義していたのでその要素を指定した。</p> <h3 id="handに指定したものが複数あるとおかしくなる"><a href="#hand%E3%81%AB%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%8C%E8%A4%87%E6%95%B0%E3%81%82%E3%82%8B%E3%81%A8%E3%81%8A%E3%81%8B%E3%81%97%E3%81%8F%E3%81%AA%E3%82%8B">handに指定したものが複数あるとおかしくなる</a></h3> <p>super-keyboardの動作仕様として、キーボード画像のhoverしたところの位置を判定して色替えを行っている。それをそのままキーボードの入力としているため、複数の要素でhoverできたりするとどうもおかしくなるっぽい。というか、検索した最初の要素でしか動かないっぽいので、右手では動かないけど実は左手では動く、みたいなパターンもあるっぽい。</p> <p>うまく動かない場合は一度handの指定では一つの要素だけ存在するようにして試すとうまくいく可能性がある。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/15197 2019-07-03T22:06:49+09:00 2019-07-03T22:09:21+09:00 https://crieit.net/posts/Oculus-Quest Oculus Questのコントローラの角度が謎 <p>A-FrameでOculus Questのコントローラを使う場合、oculus-quest-controlsコンポーネントを使うことができる。この動きに連動して銃を撃つようなアクションを作っていたのだが、どうもどうやっても角度が合わない。そのためちょっと調べてみたところ謎の角度になっていることがわかった。</p> <h2 id="ベースの角度"><a href="#%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E8%A7%92%E5%BA%A6">ベースの角度</a></h2> <p>手を真下に下ろしているような状態がベースの角度となり、x, y, zともに0になる。</p> <h2 id="上下の動き"><a href="#%E4%B8%8A%E4%B8%8B%E3%81%AE%E5%8B%95%E3%81%8D">上下の動き</a></h2> <p>その状態からそのまま手を上に上げるとxの角度。段々と180に近づいていき、そのまま後ろに行くと-180度から-0に近づいていく。</p> <h2 id="左右の動き"><a href="#%E5%B7%A6%E5%8F%B3%E3%81%AE%E5%8B%95%E3%81%8D">左右の動き</a></h2> <p>次に真下の状態から左右方向に手を上げるとzの角度。手を右方向に上げていくと180に向かっていき、左方向に傾けると-180度に向かっていく。</p> <h2 id="yの傾き"><a href="#y%E3%81%AE%E5%82%BE%E3%81%8D">yの傾き</a></h2> <p>yの傾きは、手を真下に下ろしたまま手の位置を固定したまま自分が手を中心に回るような動きとなる。これがちょっと不思議。</p> <p>左回りに回転させると、段々と90度に近づいていく。ところが、90度を超えてからは今度はだんだんとそのまま0に近づいていく。右回りも同様で、段々と-90度に近づき、そこを経由して0に戻っていく。</p> <p>ここの挙動が他と変わっているおかげで連動して生成する物体の傾きがどうしてもうまくあわなかったっぽい。</p> <p>もしかしたら知っている人からすれば一般的な話なのかもしれないが、とりあえずメモ。</p> <p>ちなみにダンプは適当に<code>a-text</code>を配置してそれに値を<code>setAttribute('value', value)</code>して直接VR上で見た。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/15121 2019-06-17T23:27:42+09:00 2019-06-17T23:27:42+09:00 https://crieit.net/posts/A-Frame-VR A-FrameでVRラジコンを作る <p>前回3D空間でキーボード操作のラジコンを作ったが、それをOculusQuestのVR空間内でスティックで操作して遊べるようにしてみた。前回のは下記。</p> <p><a href="https://crieit.net/posts/A-Frame-5d06dabaa8db2">A-Frameでキーボード操作のラジコンを作ってみる</a></p> <p>これにスティックによる処理を追加していく。</p> <p><a href="https://crieit.now.sh/upload_images/3b22aacb23f3a5542c2d4be1d05aaf725d07a26a1847d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3b22aacb23f3a5542c2d4be1d05aaf725d07a26a1847d.png?mw=700" alt="" /></a></p> <h2 id="スティック操作による値を取得"><a href="#%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E6%93%8D%E4%BD%9C%E3%81%AB%E3%82%88%E3%82%8B%E5%80%A4%E3%82%92%E5%8F%96%E5%BE%97">スティック操作による値を取得</a></h2> <p>左手右手の各コントロールコンポーネントはtracked-controlsというをベースとしており、これのaxismoveイベントを使うことでスティックの傾きを取得することができる。</p> <p>そのためイベント受信用のコンポーネントを作り、それをhand-controlsに割り当てれば取得することができる。例えば下記のような感じで左手用、右手用のcar-controller-left, car-controller-rightコンポーネントを作った場合は下記のようになる。</p> <pre><code class="html"> <a-entity hand-controls="left" mixin="controller" car-controller-left></a-entity> <a-entity hand-controls="right" mixin="controller" car-controller-right></a-entity> </code></pre> <p>コンポーネントは下記のような感じ。左手の上下でスピード、右手の左右でハンドルをさばく。</p> <pre><code class="javascript"> AFRAME.registerComponent('car-controller-left', { init: function () { this.el.addEventListener('axismove', function (e) { const car = document.querySelector('[car]').components.car car.onAxisMoveSpeed(e) }) } }) </code></pre> <p>あとはもう面倒になったので傾きも使わず前回作った処理をそのまま呼んでいるだけ。</p> <pre><code class="javascript"> onAxisMoveSpeed: function(e) { if (e.detail.axis[1] == 0) { this.speeding = null } else if (e.detail.axis[1] > 0) { this.speeding = 'down' } else if (e.detail.axis[1] < 0) { this.speeding = 'up' } }, onAxisMoveAngle: function(e) { if (e.detail.axis[0] == 0) { this.rotating = null } else if (e.detail.axis[0] > 0) { this.rotating = 'right' } else if (e.detail.axis[0] < 0) { this.rotating = 'left' } }, </code></pre> <h2 id="実際のもの"><a href="#%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%82%82%E3%81%AE">実際のもの</a></h2> <p>実際にVR上でプレイしたものを録画したやつ。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">VRでのスティック操作バージョン(モデル変える前に撮影したやつ) <a target="_blank" rel="nofollow noopener" href="https://t.co/9v34bxapMu">pic.twitter.com/9v34bxapMu</a></p>— だら🍔技術系投稿サービスや100の質問メーカー運営中 (@dala00) <a target="_blank" rel="nofollow noopener" href="https://twitter.com/dala00/status/1140624336404938752?ref_src=twsrc%5Etfw">June 17, 2019</a></blockquote> <p>GitHubページで実際に試せる。実機がない人はキーボードのWASDでもOK。</p> <p><a target="_blank" rel="nofollow noopener" href="https://dala00.github.io/a-frame-car-sample/">https://dala00.github.io/a-frame-car-sample/</a></p> <p>ソースはGitHubにもアップしてある。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/dala00/a-frame-car-sample">dala00/a-frame-car-sample: Car control sample with A-Frame</a></p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>めちゃくちゃ簡単なのでぜひみんなやってみましょう。</p> <p>次はFirebaseのRealtime Databaseいれてみんなで同時に部屋の中にいる、みたいなの試したい。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/15119 2019-06-17T22:42:44+09:00 2019-06-17T22:42:44+09:00 https://crieit.net/posts/Windows-Oculus-Quest Windowsで? Oculus Quest内で撮影した動画が正常に取得できない場合 <p>Oculus Questは元々撮影機能が付いており、VRで遊んでいる様子を撮影して動画にすることができる。しかし、どうもWindowsでかどうかはわからないが、USB接続して直接mp4ファイルをコピーすると壊れてしまって再生できなくなるっぽい。(2019/6/17現在)</p> <p>詳しいことはよくわからないが、下記の情報を元に試してみたら動画をPCにコピーしてくることができた。</p> <p><a target="_blank" rel="nofollow noopener" href="https://forums.oculusvr.com/community/discussion/73315/video-codec-change">Video codec change? — Oculus</a></p> <p>具体的には下記のような感じでadbを利用してダウンロードすれば正常なまま取得できるっぽい。</p> <pre><code class="shell">adb pull /sdcard/Oculus/VideoShots/file-you-want.mp4 </code></pre> <p>/Oculus以降は直接エクスプローラでパスを見てみた方が良いかも。</p> <p>もしかしたらアップデートが来れば改善するかもしれないので今だけかもしれない。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/15100 2019-06-12T22:28:14+09:00 2019-06-14T07:38:28+09:00 https://crieit.net/posts/A-Frame-Super-Hands-VR A-FrameのSuper HandsでVR空間のオブジェクトを掴んでみる <p>A-Frameという、マークアップとJavaScriptを使ってOculus Quest等のブラウザだけでVRアプリケーションを作ることのできるフレームワークがあります。</p> <p>サンプルなどを試してみると本当に簡単にVR空間を作ることができて面白いのですが、やはりWebエンジニアとしてはただ物を配置するだけではなく色々とインタラクティブにVR空間で遊べるようにしてみたいと感じます。</p> <p>とくにOculus Questのようなコントローラは物を掴んだりという操作が非常にすべてが直感的で、VRをはじめてみて一番の衝撃でもありました。なんとかそのあたりを簡単にできるようにしたいと思い調べてみたところ、下記のライブラリが見つかりました。</p> <h2 id="Super Hands"><a href="#Super+Hands">Super Hands</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/wmurphyrd/aframe-super-hands-component">wmurphyrd/aframe-super-hands-component: 👐All-in-one natural hand controller, pointer, and gaze interaction library for A-Frame</a></p> <p>公式のマニュアルでも紹介されており、恐らく簡単にコントローラを使えるようにしてくれているのだと思います。</p> <p>実際に上記のページのサンプルを試してみました。</p> <p><a href="https://crieit.now.sh/upload_images/7acd26c9fa4d2d46370d8e514f588d615d00fc61c5d5d.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7acd26c9fa4d2d46370d8e514f588d615d00fc61c5d5d.jpg?mw=700" alt="" /></a></p> <p>こんな感じで手が表示され、青いボックスを掴んだり、両手で掴むと拡大縮小することもできます。GitHubのREADMEを見るとわかりますが、ソースもたったこれだけです。</p> <pre><code class="html"> <a-scene> <a-assets></a-assets> <a-entity> <a-camera></a-camera> <a-entity sphere-collider="objects: a-box" super-hands hand-controls="left"></a-entity> <a-entity sphere-collider="objects: a-box" super-hands hand-controls="right"></a-entity> </a-entity> <a-box hoverable grabbable stretchable draggable dropppable color="blue" position="0 0 -1"></a-box> </a-scene> </code></pre> <h2 id="注意点"><a href="#%E6%B3%A8%E6%84%8F%E7%82%B9">注意点</a></h2> <p>多分ですが、ローカルやCodePenなどでもうまく動かなかった気がします。手のモデルを読み込んでいるのでとりあえずサンプルのHTMLをどこかWeb上にアップしてアクセスして試さないとダメっぽいです。</p> <p>ですのでもしかしたら公式で紹介しているコントローラなどでもうまく手を使ったりすることができるのかもしれません。</p> <p>ちなみにサーバーアップされているサンプルが下記です。(対応端末でないと手は出てきません)</p> <p><a target="_blank" rel="nofollow noopener" href="https://wmurphyrd.github.io/aframe-super-hands-component/examples/physics/">https://wmurphyrd.github.io/aframe-super-hands-component/examples/physics/</a></p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>とにかくA-Frameでできることのサンプルやプレビュー画像がWeb上に不足しているので、何かしら試したら投稿していってみたいと思います。</p> だら@Crieit開発者